首頁  >  問答  >  主體

android中ListView嵌套GridView,其中某个GridView的内容无法显示?

描述

我在ListView中嵌套了一个GridView,即每个item中都有一个GridView。
GridView中显示一组图片。

代码

ListView的适配器

下面是
ListView的适配器中的getView。
其中的list里面是一组图片的Uri。
我进行判断了一下,如果list里没有Uri,就隐藏GridView;如果有才给GridView设置适配器显示出来。

 @Override
        public View getView(int arg0, View convertView, ViewGroup arg2) {

            ViewHolder viewHolder;
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.listview_main_item, null);
                viewHolder = new ViewHolder();

                viewHolder.mImgGridView = (GridView) convertView
                        .findViewById(R.id.gv_listView_main_gridView);
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            ArrayList<String> list = (ArrayList<String>) initData().get(arg0).get("urls");
            if (list.size() == 0) {
                viewHolder.mImgGridView.setVisibility(View.GONE);
            } else {
                Log.d("PromotionalMaterialActi", "" + list.size());
                viewHolder.mImgGridView.setAdapter(new MyGridViewAdapter(context, list));
            }
            return convertView;
        }

数据

ArrayList<Map<String, Object>> mDatas = new ArrayList<Map<String, Object>>();

            //没图片
            Map<String, Object> map = new HashMap<>();
            ArrayList<String> urls = new ArrayList<String>();
            map.put("urls", urls);
            mDatas.add(map);

            //一张图片
            Map<String, Object> map2 = new HashMap<>();
            ArrayList<String> urls2 = new ArrayList<String>();
            urls2.add("http://img.my.csdn.net/uploads/201410/19/1413698883_5877.jpg");
            map2.put("urls", urls2);
            mDatas.add(map2);

            //三张图片
            Map<String, Object> map3 = new HashMap<>();
            ArrayList<String> urls3 = new ArrayList<String>();
            urls3.add("http://img.my.csdn.net/uploads/201410/19/1413698867_8323.jpg");
            urls3.add("http://img.my.csdn.net/uploads/201410/19/1413698883_5877.jpg");
            urls3.add("http://img.my.csdn.net/uploads/201410/19/1413698837_5654.jpg");
            map3.put("urls", urls3);
            mDatas.add(map3);

            //六张图片
            Map<String, Object> map4 = new HashMap<>();
            ArrayList<String> urls4 = new ArrayList<String>();
            urls4.add("http://img.my.csdn.net/uploads/201410/19/1413698837_7507.jpg");
            urls4.add("http://img.my.csdn.net/uploads/201410/19/1413698865_3560.jpg");
            urls4.add("http://img.my.csdn.net/uploads/201410/19/1413698867_8323.jpg");
            urls4.add("http://img.my.csdn.net/uploads/201410/19/1413698837_5654.jpg");
            urls4.add("http://img.my.csdn.net/uploads/201410/19/1413698883_5877.jpg");
            urls4.add("http://img.my.csdn.net/uploads/201410/19/1413698839_2302.jpg");
            map4.put("urls", urls4);
            mDatas.add(map4);

            //六张图片
            Map<String, Object> map5 = new HashMap<>();
            ArrayList<String> urls5 = new ArrayList<String>();
            urls5.add("http://img.my.csdn.net/uploads/201410/19/1413698837_7507.jpg");
            urls5.add("http://img.my.csdn.net/uploads/201410/19/1413698865_3560.jpg");
            urls5.add("http://img.my.csdn.net/uploads/201410/19/1413698867_8323.jpg");
            urls5.add("http://img.my.csdn.net/uploads/201410/19/1413698837_5654.jpg");
            urls5.add("http://img.my.csdn.net/uploads/201410/19/1413698883_5877.jpg");
            urls5.add("http://img.my.csdn.net/uploads/201410/19/1413698839_2302.jpg");
            map.put("urls", urls5);
            mDatas.add(map5);

现象描述

第四个item上的GridView图片无法显示


解决方法

viewHolder.mImgGridView.setVisibility(View.GONE);
这样第四个item上的GridView图片就会显示出来了。
但是这是为什么?

阿神阿神2724 天前587

全部回覆(2)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 15:55:02

    if (list.size() == 0) {
                    viewHolder.mImgGridView.setVisibility(View.GONE);
                } else {
                    Log.d("PromotionalMaterialActi", "" + list.size());
                    viewHolder.mImgGridView.setAdapter(new MyGridViewAdapter(context, list));
                }

    修改成

    if (list.size() == 0) {
                    viewHolder.mImgGridView.setVisibility(View.GONE);
                } else {
                    Log.d("PromotionalMaterialActi", "" + list.size());
                    viewHolder.mImgGridView.setVisibility(View.VISIBLE);
                    viewHolder.mImgGridView.setAdapter(new MyGridViewAdapter(context, list));
                }

    這樣修改的原因是:有些Item中,list為空,所以你會設定mImgGridView屬性為GONE。但當ListView從Holder中取到這個View復用的時候,這個mImgGridView始終為GONE,因此你需要手動設定為VISIBLE。

    回覆
    0
  • 黄舟

    黄舟2017-04-17 15:55:02

    這是item重複使用的問題,所有設定狀態的操作,必須考慮周全,也就是寫了if條件的語句,預設else也需要設定預設操作。

    回覆
    0
  • 取消回覆