Heim > Fragen und Antworten > Hauptteil
我在ListView中嵌套了一个GridView,即每个item中都有一个GridView。
GridView中显示一组图片。
下面是
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图片就会显示出来了。
但是这是为什么?
巴扎黑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。