java - ListView 中的 Gridview 正在为每一行重复最后一个 gridview 项目

标签 java android listview gridview

我正在尝试为每一行创建一个 ListView :标题和项目网格。使用下面的代码,我得到了正确标题的列表,但每行上的 gridView 都填充了最后一行的项目。

日志记录显示,每次调用 getView 时,它都会获取具有正确标题的正确项目。我怀疑存在共享引用,或者我在某处写入了错误的行。

类似的问题都是 View 回收的问题,我做得对。

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = l_Inflater.inflate(R.layout.list_item_my_listview, null);
        holder = new ViewHolder();
        holder.txt_name = (TextView) convertView.findViewById(R.id.name);
        holder.myGridView = (GridView) convertView.findViewById(R.id.my_gridview);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    listItemDetails item = itemDetailsArrayList.get(position);
    holder.txt_name.setText(item.name);

    gridItemListAdapter gridArrayAdapter = new gridItemListAdapter(context, item.getGridItems());
    holder.myGridView.setAdapter(gridArrayAdapter);

    Util.Log(getClass().getName());
    Util.Log(cabinetId + " - " + cabinet.getCageList().size());
    return convertView;
}

最佳答案

就像我在上面的评论中所说的那样,当您在这一行的 item.getGridItems() 上获取项目的 GridView 时,就会出现问题:

gridItemListAdapter gridArrayAdapter = new gridItemListAdapter(context, item.getGridItems());

问题不在于具有每个单个实例的适配器。最后一行的重复发生是因为 - 我会尝试猜测你的结构,我不知道,但我看到了线索 - 每次你调用这个方法时,你可能会使用相同的 array ,所以相同的值。
因此,最后一行的最后更新会更改每个适配器实例中的每个 GridItems 引用。

当我进行测试来解决此问题时,我避免通过调用对象处理在适配器中的 getView() 中进行额外工作来获取它。我使用了已经设置的对象字段。因此,您必须执行与获取项目名称相同的操作: item.name 才能获取 gridview 的项目,如下所示:

gridItemListAdapter gridArrayAdapter = new gridItemListAdapter(context, item.gridItems);

在您的 Item 对象中应该是这样的:

public ArrayList<Images> gridItems; // arraylist or whatever
...
public void setGridItems(ArrayList<Images> gridItems) { // set it when you set the name
    this.gridItems = gridItems;
}

因此,Item 对象将为每个实例提供新的 GridItems

关于java - ListView 中的 Gridview 正在为每一行重复最后一个 gridview 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34222337/

相关文章:

java - 使用正则表达式拆分字符串不返回任何值

java - 用于匹配任意两个 HTML 标签之间的正则表达式

java - 如何创建一个可以在不同 Activity 中多次引用的util

java - Android 应用程序崩溃并出现错误 : Resource ID #0x7f0d0061 type #0x12 is not valid

c# - 隐藏 ListView ,直到按下按钮

java - 更改 ListView 的一个元素的背景颜色

java - 露天共享认证

android - 如何删除动态膨胀的 View ?

java - 使用 JSON 从 API 获取数据并将两个对象存储在数组适配器的单行中

java - LibGDX 的 mesh.getVerticies 输出什么?