显然notifyDataSetChanged()
只更新listview
中的可见项目,我有一个系统可以在点击项目时改变项目的背景颜色(到dkgray),我将其他所有内容都设置为透明(默认值),但是其他不可见的项目仍然是选中的(dkgray)(我只希望当前选择的项目是dkgray)。有没有办法强制notifyDataSetChanged()
更新所有项目。
以下是示例:
//makes all item backgrounds transparent
public void resetListViewBackground(){
for (int i = 0; i < listView.getChildCount(); i++){ //parent.getChildCount()
listView.getChildAt(i).setBackgroundColor(Color.TRANSPARENT);
}
}
//reloads the listview
private void reloadListView() {
listItems.clear();
adapter.notifyDataSetChanged();
listView.invalidateViews();
ArrayList<HashMap<String, String>> notesArrayList = dbTools.getAllNotes();
for (int i = 0; i < notesArrayList.size(); i++){
String temp = "";
if (notesArrayList.get(i).get("note").length() > 51){
temp = notesArrayList.get(i).get("note").substring(0,50).toString() + "...";
} else {
temp = notesArrayList.get(i).get("note").toString();
}
listItems.add(temp);
adapter.notifyDataSetChanged();
}
}
我打电话给resetListViewBackground()
的所有地方,之后我致电reloadListView()
。
这就是我用来突出显示所选项目的内容。
view.setBackgroundColor(Color.DKGRAY);
此外,此问题最常见的情况是每6个项目都会突出显示。 listview
一次仅显示约4个项目。
答案 0 :(得分:0)
由于视图回收已完成,getChildCount()
方法不适用于所有列表项。
Astral在评论中写道是正确的。
1)创建自定义适配器。(参见http://windrealm.org/tutorials/android/listview-with-checkboxes-without-listactivity.php)
2)在onListItemClick
侦听器的onItemClick()
方法内,调用适配器的notifyDataSetChanged()
方法(每当用户单击列表项时)。
我修改了我提到的项目并将其发布到我的Dropbox上。(只需在Eclipse中导入并运行)。 请查看https://www.dropbox.com/s/gchccjzpkxk8n2z/Planets_modified.zip