Listview中的Gridview重复每行

时间:2015-12-11 11:19:16

标签: java android listview gridview

我试图为每一行制作一个列表视图:标题和项目网格。使用下面的代码我得到一个正确的标题列表,但每行的gridView都填充了最后一行的项目。

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

类似的问题是回收意见的所有问题,我做得对。

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;
}

1 个答案:

答案 0 :(得分:1)

就像我在上面的评论中所说的那样,当您在GridView的{​​{1}}处获得该项item.getGridItems()时会出现此问题:

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

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

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

item.name

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