我有78个项目的列表视图,在我的活动文件中我描述了点击功能实现
lv.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Log.d("Click from activity", "win");
if(!checkedContacts.contains(clearContacts.get(arg2))){
checkedContacts.add(clearContacts.get(arg2));
arg1.setBackgroundColor(R.color.selectedItem);
} else {
checkedContacts.remove(clearContacts.get(arg2));
arg1.setBackgroundColor(Color.WHITE);
}
}
});
因此,当我点击项目时,它会改变颜色。但是如果我向下滚动listView,其他元素每10次会有新的颜色。 checkedContacts数组具有正确的值但是,可视化错误
答案 0 :(得分:0)
问题是listviews会回收屏幕外的视图,因此您不会保存行状态。当您从屏幕上取出该行时,它将被删除,当它再次返回时,它将再次在您的适配器中重新填充。
您可以解决此问题,例如,使用checkedContacts var并使其可以从您的适配器访问,因此,如果您的适配器的getView
函数中给出的位置可以检查行是否已被检查然后你可以改变背景颜色。如果用户旋转屏幕,您可以将此变量保存在活动的onSaveInstanceState
中,以便稍后恢复。
希望有所帮助:)