这是侦听器中的代码:
public void onItemClick(AdapterView<?> parentAdapterView, View viewSelected, int pos, long id) {
if(selectedItems.contains(viewSelected)) {
//remove it from the selected list.
selectedItems.remove(viewSelected);
viewSelected.setBackgroundColor(Color.BLACK);
}
else {
selectedItems.add(viewSelected);
viewSelected.setBackgroundColor(Color.RED);
}
}
selectedItems只是一个视图列表(List),我用它来跟踪所有已选择的项目。
这样可以正常工作,直到项目数导致列表溢出(因此,列表变为可滚动)。然后,当点击一个项目时,另一个项目会在列表的下方突出显示(除了第一项)?
想不出为什么会发生这种情况?我在Google上搜索过,但无济于事......
我很感激有关此事的任何帮助。
干杯
编辑:我用来为列表视图提供视图的代码很简单:
uiListViewRes = R.layout.main_list_item;
ListView overTwoDaysView = (ListView) findViewById(R.id.overtwolistview);
String[] from = {"_id","foodItemName", "expire", "dateAdded"};
int[] to = {R.id.itemIDhidden,R.id.name, R.id.expiry, R.id.dateAddedLabel};
SimpleAdapter overTwoDaysAdapter = new SimpleAdapter(this, adapter.getAllItemsOverTwoDays(), uiListViewRes, from, to);
overTwoDaysView.setAdapter(overTwoDaysAdapter);
答案 0 :(得分:0)
如果你使用this.invalidate(),会发生什么?
不确定它是否会起作用,看起来你正在做的一切......重绘可能有所帮助。
public void onItemClick(AdapterView<?> parentAdapterView, View viewSelected, int pos, long id) {
if(selectedItems.contains(viewSelected)) {
//remove it from the selected list.
selectedItems.remove(viewSelected);
viewSelected.setBackgroundColor(Color.BLACK);
}
else {
selectedItems.add(viewSelected);
viewSelected.setBackgroundColor(Color.RED);
}
this.invalidate();
}
如果您每次遇到问题时都重复使用该视图,但这是我在此代码中唯一可以考虑的问题。
答案 1 :(得分:0)
问题是ListView重用了Views以获得更好的性能。
因此,ListView只分配X个视图,然后尝试重用不可见的视图 - 通过更改视图的属性。
这意味着您无法保存视图/设置视图的背景,因为稍后将在ListView中使用相同的View实例。
有几种方法可以解决这个问题:
您可以查看ListView的CHOICE_MODE_MULTIPLE
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
示例:http://www.vogella.de/articles/AndroidListView/article.html
您可以保存行的ID或位置,并在自定义适配器中使用它来相应地设置背景。
答案 2 :(得分:0)