我创建了一个列表视图,其中包含所选项目突出显示,并且可以在滚动期间保持突出显示(感谢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;
}
答案 0 :(得分:1)
您要在此处执行的操作是告诉您的ListView
应该重新绘制项目View
,方法是使用getView(int, View, ViewGroup)
再次检索它们。这是您更改所选状态的地方。
要实现此目的,请致电notifyDatasetChanged()
上的ListAdapter
。这将导致屏幕上的所有项目再次调用getView(int, View, ViewGroup)
。
假设您的super
方法有效地回收了convertView
,那么性能应该不是问题。