Android ListView中嵌套GridView,GridView不显示

来源:互联网 发布:淘宝描述不符有赔偿吗 编辑:程序博客网 时间:2024/06/06 01:52

记得这个问题是之前也有见过的,不过一直发现不了问题。今天突然有了一种必须必须必须要处理掉它的决心,通过网上查看,还是没有一篇文章有出现这种情况的,而是gridview显示不全的问题。而我的问题是gridview全部不显示。

出现这种情况,个人分析觉得就三种情况:

  1. 布局 (继承NoScrollGridView)
  2. 适配器 (是否实现各个方法所需的)
  3. 数据设置 (刷新、不小心clear掉了、数据对象的赋值)

推敲问题:

  • 首先确定自定义的MyGridView是继承NoScrollGridView
  • 然后看适配器是否正确的实现了各个方法
  • 再给布局中给MyGridView设置固定的高度
  • 如果还有显示的话,那就可能数据设置问题
  • 查找发现,原来是低级错误,也可能是我们java基础的问题

先附上自己定义的错误适配器MyGridAdapter

public class MyGridAdapter extends BaseAdapter {    private Context mContext;    private List<GridItem> mItems = new ArrayList<>();    public MyGridAdapter(Context context) {        mContext = context;    }    @Override    public int getCount() {        return mItems.size();    }    @Override    public GridItem getItem(int position) {        if (mItems.size() > 0) {            return mItems.get(position);        }        return new GridItem();    }    public List<GridItem> getItems() {        return mItems;    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {        ......        return view;    }    public void targetClick(int position) {        targetClick(getItem(position));    }    public void targetClick(GridItem item) {    }    public void setItems(List<GridItem> items) {        this.mItems.clear();        if (items != null) {            addItems(items);        }        notifyDataSetChanged();    }    private void addItems(List<GridItem> items) {        this.mItems = items;    }    public Context getContext() {        return mContext;    }}

不要纠结上面GridItem类跟getView(..)方法的实现,因为这些都是相信你们都懂吧,这些都不是我要特别介绍的,而是想说的是addItems()方法,大家看错了什么问题了吗?

举个例子:

ArrayList<String> A= new ArrayList<String>();  A.add("1");  A.add("2");  ArrayList<String> B;  B = A;  

此时B对象相当与A对象的引用,而并不是将A对象的值单纯的传递给B对象。
即:B对象的操作将直接改变A对象。如B.add(“3”);结果A中也包含了“3”

看到这里你应该明白怎么回事了吧。原来我的addItems中只是拿到了对象的引用,而没有真正的把值传递给mItems对象,所以就出现了一大乌龙——为什么gridview老是不显示的问题。

解决方式:

private void addItems(List<GridItem> items) {    for (GridItem item : items) {        this.mItems.add(item);    }}