我知道这听起来很简单,还有关于这个的问题。但它们都不能解决我的问题。所以我们开始吧:
我想在用户单击时更改 ListActivity
中列表项的背景颜色,并在用户再次单击时将其更改回原始颜色(即选择/取消选择项目的外观)
我尝试使用 getChildAt,如果我无需滚动即可在一个屏幕上看到所有项目,它会完美运行。
代码:
getListView().getChildAt(position).setBackgroundColor(Color.CYAN);
当我在列表中有更多项目并且用户必须滚动浏览它们时,问题就开始了。更改项目的背景后,背景颜色会在我滚动时显示在新可见的项目上。此外,当再次单击项目时,getChildAt(position)
返回 null
(因此返回 NullPointerException
)。
任何人都可以帮我写一个简单的代码来帮助我更改列表项的背景颜色吗?
提前致谢!
最佳答案
没问题。我会在自定义 ListAdapter
的 getView()
方法中执行此操作。
MyAdapter extends SimpleAdapter {
private ArrayList<Integer> coloredItems = new ArrayList<Integer>();
public MyAdapter(...) {
super(...);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
if (coloredItems.contains(position)) {
v.setBackgroundColor(Color.CYAN);
} else {
v.setBackgroundColor(Color.BLACK); //or whatever was original
}
return v;
}
}
单击列表项时更新 coloredItems
。
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
if (coloredItems.contains(position)) {
//remove position from coloredItems
v.setBackgroundColor(Color.BLACK); //or whatever was original
} else {
//add position to coloredItems
v.setBackgroundColor(Color.CYAN);
}
}
关于android - 在 Android ListActivity onListItemClick 中更改项目的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12610695/