突出显示所选的ListView项目

时间:2015-06-22 19:52:55

标签: java android listview highlight

好的,所以我已经能够在ListView中高亮显示一个项目,但最终突出显示每四个项目。我非常确定这是因为回收利用。然后我遇到了一个问题,即滚动后突出显示的项目将恢复正常,这也是因为回收。有没有办法让它突出显示,或者可能阻止ListView回收?

这就是代码现在的样子......

runTimes.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> list, View v, int pos, long id) {     
                v.setSelected(true);

        }
    });

这是滚动后突出显示的项目恢复正常的代码。

3 个答案:

答案 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"));