Android Listview突出显示

时间:2014-08-11 17:34:42

标签: android android-listview

我创建了一个列表视图,其中包含所选项目突出显示,并且可以在滚动期间保持突出显示(感谢SO)......

我的问题/问题是这样的:当我在列表中选择一行时,先前选择的行上的突出显示将按预期消失,除了在一个实例中:如果我将突出显示的行滚动到列表的顶部,但不是完全不在列表中(例如,包含在txt2中的数据[请参阅下面的代码] ...项目的一部分不在可查看列表中,项目的一部分保留在可查看列表中),然后单击另一行下面, BOTH 的行现在突出显示,我不想要!

我做错了什么或者这是在listview滚动期间进行回收的结果?

任何想法/建议/解释都将非常受欢迎。

这是我在我的适配器的getView方法中使用的代码:

public View getView(int position, View convertView, ViewGroup parent)
        {

            final View row = super.getView(position, convertView, parent);

            TextView txt1 = (TextView)row.findViewById(R.id.txt1);
            TextView txt2 = (TextView)row.findViewById(R.id.txt2);
            TextView txt3 = (TextView)row.findViewById(R.id.txt3);
            TextView txt4 = (TextView)row.findViewById(R.id.txt4);

            if (position == gv.currentListRecord)
            {


  txt1.setTextColor(getResources().getColor(R.color.episode_list_font_color_selected));

  txt2.setTextColor(getResources().getColor(R.color.episode_list_font_color_selected));

  txt3.setTextColor(getResources().getColor(R.color.episode_list_font_color_selected));

  txt4.setTextColor(getResources().getColor(R.color.episode_list_font_color_selected));
            }
            else
            {

  txt1.setTextColor(getResources().getColor(R.color.genre_list_font_color));

  txt2.setTextColor(getResources().getColor(R.color.genre_list_font_color));

  txt3.setTextColor(getResources().getColor(R.color.genre_list_font_color));

  txt4.setTextColor(getResources().getColor(R.color.genre_list_font_color));
           }
           return row;
       }

1 个答案:

答案 0 :(得分:1)

您要在此处执行的操作是告诉您的ListView应该重新绘制项目View,方法是使用getView(int, View, ViewGroup)再次检索它们。这是您更改所选状态的地方。

要实现此目的,请致电notifyDatasetChanged()上的ListAdapter。这将导致屏幕上的所有项目再次调用getView(int, View, ViewGroup)

假设您的super方法有效地回收了convertView,那么性能应该不是问题。