java - 为什么我的自定义 GridView 仅显示一列?

标签 java android gridview baseadapter custom-adapter

我尝试制作一个自定义 GridView,以编程方式添加 TextView 项目。 TextView 需要充当 ImageView,只是其中包含文本。

但由于某些奇怪的原因,它只显示 4 列中的 1 列(但如果它太大,那么 3 就是我的最小容量)。

我浏览了类似的案例,寻找尝试同样事情的人,但最终都失败了。 我每次得到的只是一列 Gridview。

我想听听一些意见,以解决这个问题。

我的GridView:

<GridView
    android:id="@+id/gridView"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:layout_alignParentEnd="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="73dp"
    android:layout_toEndOf="@+id/imageView15"
    android:columnCount="4"
    android:gravity="center"
    android:columnWidth="100dp"
    android:stretchMode="columnWidth" />

我的项目布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_height="match_parent"
android:backgroundTint="@android:color/black"
android:alpha="100"
android:layoutDirection="ltr">

<TextView
    android:id="@+id/item"
    android:layout_width="150px"
    android:layout_height="150px"
    android:layout_marginRight="50px"
    android:textColor="@android:color/black"
    android:textSize="10sp" />
</LinearLayout>

最后是适配器:

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;


public class CustomListAdapter extends BaseAdapter {

    private Activity context;
    private List<TextView> items;
    private static LayoutInflater inflater;

    public CustomListAdapter(Activity context, List<TextView> items) {

        this.context = context;
        this.items = items;
        inflater = (LayoutInflater)     context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    }


    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public class Holder {
        TextView tv;
    }


    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        inflater = context.getLayoutInflater();

        View rowView = inflater.inflate(R.layout.inventory_item, null);
        Holder holder = new Holder();

        holder.tv = (TextView) rowView.findViewById(R.id.item);
        holder.tv.setText(items.get(position).getText());
        holder.tv.setBackground(items.get(position).getBackground());
        holder.tv.setTextColor(items.get(position).getTextColors());

        return rowView;
    }


}

提前致谢。

最佳答案

shows me only 1 column out of 4

您需要使用:android:numColumns="4"

在您的代码中:

 <GridView
    android:id="@+id/gridView"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:layout_alignParentEnd="true"
    android:layout_alignParentTop="true"
    android:background="@color/color_white"
    android:columnWidth="100dp"
    android:gravity="center"
    android:horizontalSpacing="5dp"
    android:numColumns="4"
    android:padding="5dp"
    android:scrollbars="none|horizontal"
    android:stretchMode="columnWidth"></GridView>

关于java - 为什么我的自定义 GridView 仅显示一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43262451/

相关文章:

java - 使用 with* 函数、TemporalAdjusters 或设置 TemporalFields 调整 ZonedDateTimes 之间有什么区别吗?

java - 在广播接收器中显示对话框

Android数据绑定(bind): Why doesn't passing in variable to ViewStubs work like include layouts?

c# - GridView 行包含超链接,单击它后应在另一个页面中显示该特定行的值

android - 在异步任务中加载 GridView 位图

java - 如何让扫描仪输入后保持在同一行?

java - 从 Java 中运行命令行操作

android - MediaStore.MediaColumns#DATE_TAKEN 是否仅适用于 API 级别 29?

android - WorkManager 作业未重新安排或一段时间后未触发

wpf - 如何在初始化后调整 GridView 列的宽度?