假设我认为我将其用作切换按钮。当用户点击它时,我会通过setBackgroundResource()
更改背景。列表的数量大约为15个,ListView
只能在屏幕上显示约7个项目。
首先,我尝试使用ListView.getChildAt(position)
,但当位置超过7时,它会返回NullPointer
。 eventhough ListView.getCount()
返回15.但这是有道理的,因为它只显示可见的孩子。
然后我通过循环遍历所有绑定到此Adapter
的数据来解决它,更改布尔值,然后调用notifyDataSetChange()
因此更新数据的循环次数为15次+ 7显示可见视图。
最好的方法应该是15,那就完成了。 反正有没有实现这个目标?
感谢
答案 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);
选项是你的。