我有一个基本适配器类,我用它来填写列表视图。一些内容在布局文件中定义,我还需要根据传递给基本适配器的int值动态添加一定数量的图像按钮。
obj是一个具有int值和bitmap的arrayList的对象;
当我运行此代码时,我得到更多的图像按钮,然后是obj.value的值。
likePre_pics是位图的arrayList的名称
有人可以帮忙吗?
public class News_Feed_BaseAdapter extends BaseAdapter{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LinearLayout linLayout =
(LinearLayout)convertView.findViewById(R.id.like_preview_LinearLayout);
for(int i=0; i< obj.value;i++)
{
ImageButton op= new ImageButton(context);
LayoutParams lpView = new LayoutParams(100, 100);
//op.setImageBitmap(obj.get(position).likePre_pics.get(i));
linLayout.addView(op,lpView);
}
}
}
答案 0 :(得分:0)
正如我从代码中看到的那样,有两个问题,首先是IndexOutOfBoundsException。 ArrayList IndexOutOfBoundsException仅在您指的是更多/更少的项时发生。 //op.setImageBitmap(obj.get(position).likePre_pics.get(i)); 你注释掉的那一行。你指的是obj.get(position),其中obj有obj.size()的元素数。
接下来是ImageButton问题,因为当你将新的图像按钮添加到convertview的linLayout中时,你没有以有效的方式重用convertview,这就是linLayout显示超过2个图像按钮的原因。
例如:如果列表中有20个项目,则表示getView将被调用20次。正如您将在android文档中找到的那样,convertView是传递给您的旧视图,并且每次传递给您时,您都会在其中添加更多图像按钮。这就是图像按钮出现问题的原因。
如果您有兴趣,请查看Romain Guy的World of ListView谷歌i / o演示文稿。