好的,所以我已经能够在ListView中高亮显示一个项目,但最终突出显示每四个项目。我非常确定这是因为回收利用。然后我遇到了一个问题,即滚动后突出显示的项目将恢复正常,这也是因为回收。有没有办法让它突出显示,或者可能阻止ListView回收?
这就是代码现在的样子......
runTimes.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
v.setSelected(true);
}
});
这是滚动后突出显示的项目恢复正常的代码。
答案 0 :(得分:2)
到了暮光之城,你根本不应该触摸视图。您应该使用列表视图setItemChecked和选择器作为视图的背景。
runTimes.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
runTimes.setItemChecked(pos,true);
}
});
您还需要确保跟踪所选的最后位置,以便在选择新位置时取消选择
答案 1 :(得分:1)
如果您希望停止回收ListView
,您应该再次考虑是否确实需要ListView
。
但是,要使用ListView
正确完成此操作,您需要在适配器内部保存突出显示的项状态。然后在getView
根据其位置突出显示项目。
有很多关于保存ListView
项目状态的问题,我确定你能找到一些。
答案 2 :(得分:0)
我最终找到另一个问题,帮助我弄清楚如何做到这一点。这就是我做的。在OnClickListener中,我检查以前是否按下了某些东西。如果之前没有按过,那么我将视图背景颜色和prevRunView设置为视图。如果之前已按过某些内容,则我将之前的视图背景颜色更改为白色。之后,我做了和以前一样的事情,但对于不同的观点。
if(runIndex == -1){
runIndex = pos;
v.setBackgroundColor(Color.parseColor("#A6A6A8"));
prevRunView = v;
}else{
prevRunView.setBackgroundColor(Color.parseColor("#FFFFFF"));
runIndex = pos;
v.setBackgroundColor(Color.parseColor("#A6A6A8"));
prevRunView = v;
}
在我的适配器中,我编写了这段代码,因此它看起来不像是在回收。
if(ScoreActivity.runIndex == position)
v.setBackgroundColor(Color.parseColor("#A6A6A8"));
else
v.setBackgroundColor(Color.parseColor("#FFFFFF"));