Android ListView中嵌套GridView,GridView不显示

Posted BandaYung

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android ListView中嵌套GridView,GridView不显示相关的知识,希望对你有一定的参考价值。

记得这个问题是之前也有见过的,不过一直发现不了问题。今天突然有了一种必须必须必须要处理掉它的决心,通过网上查看,还是没有一篇文章有出现这种情况的,而是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);
    

以上是关于Android ListView中嵌套GridView,GridView不显示的主要内容,如果未能解决你的问题,请参考以下文章

Android 中listview嵌套listview,外面listview的item点击事件失效

Android 中listview嵌套listview,外面listview的item点击事件失效

Android之ScrollView嵌套ListView

android中ScrollView嵌套ListView或GridView显示位置问题

android listview里面能嵌套gridview吗

android scrollview嵌套listview 页面有多余空白