描述
我在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 list = (ArrayList) 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
现象描述
第四个item上的GridView图片无法显示



解决方法
把 viewHolder.mImgGridView.setVisibility(View.GONE);
这样第四个item上的GridView图片就会显示出来了。
但是这是为什么?
修改成
这样修改的原因是:有些Item中,list为空,所以你会设置mImgGridView属性为GONE。但当ListView从Holder中取到这个View复用的时候,这个mImgGridView始终为GONE,因此你需要手动设置为VISIBLE。
这是item复用的问题,所有设置状态的操作,必须考虑周全,即写了if条件的语句,默认else也需要设置缺省操作。