更改ListView中所有项目的drawable的最佳方法是什么

时间:2012-12-28 10:23:09

标签: android listview adapter

假设我认为我将其用作切换按钮。当用户点击它时,我会通过setBackgroundResource()更改背景。列表的数量大约为15个,ListView只能在屏幕上显示约7个项目。

首先,我尝试使用ListView.getChildAt(position),但当位置超过7时,它会返回NullPointer。 eventhough ListView.getCount()返回15.但这是有道理的,因为它只显示可见的孩子。

然后我通过循环遍历所有绑定到此Adapter的数据来解决它,更改布尔值,然后调用notifyDataSetChange()

因此更新数据的循环次数为15次+ 7显示可见视图。

最好的方法应该是15,那就完成了。 反正有没有实现这个目标?

感谢

1 个答案:

答案 0 :(得分:1)

忘掉你的孩子索引。您应该只在适配器中切换某种类型的标志。

然后,当再次调用getView方法时,它将重绘您的列表。

即:

public class YourAdapter extends BaseAdapter {

   private boolean useBackgroundTwo = false;

   .. constructor ..

   @Override
   public View getView (int position, View convertView, ViewGroup parent) {

       ...


       ...


       View background = findViewById(...);

       int backgroundResource = R.drawable.one;
       if(useBackgroundTwo){
            backgroundResource = R.drawable.two;
       }
       background.setBackgroundResource(backgroundResource);



       ....
   }

    public void useNewBackground(){
       this.useBackgroundTwo = true;
       notifyDataSetChanged();
    }

    public void useOldBackground(){
       this.useBackgroundTwo = false;
       notifyDataSetChanged();
    }

}

然后在您的活动代码中:

((YourAdapter) listview.getAdapter()).useNewBackground();

进一步说,您可以使用枚举而不是布尔值,并使用多个方法setBackgroundGreen()setBackgroundRed()或者您可以传入您想要使用的drawable setItemBackground(R.drawable.one);选项是你的。

Api: Adapter