按代码添加imageButtons

时间:2013-11-17 04:23:23

标签: android listview bitmap android-custom-view baseadapter

我有一个基本适配器类,我用它来填写列表视图。一些内容在布局文件中定义,我还需要根据传递给基本适配器的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);

      }

                }
         }

1 个答案:

答案 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演示文稿。