我在ListActivity中使用SimpleAdapter,我希望当用户选择项目时突出显示此项目。我尝试扩展SimpleAdapter并覆盖getView()方法:
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (position == mItemIndex) {
convertView.setSelected(true);
convertView.setPressed(true);
convertView.setBackgroundColor(Color.parseColor("#FF9912"));
}
return view;
}
但此解决方案无法正常运行。它将背景颜色设置为多于一个列表行。 那个人可以帮助我吗?
答案 0 :(得分:1)
这是因为convertView
正在重复使用,并且您不会更新两种情况的选定状态(已选择/未选中)。当它不是您想要选择的项目时,您需要致电setSelected(false)
并重置背景颜色。此外,不需要调用setPressed
。
您还应该检查ColorStateList
,这样您就可以定义各种状态的颜色。然后你可以使用内置的支持单项选择。
答案 1 :(得分:0)
因此,如果用户点击它,您可以通过更改其颜色来突出显示所选列表项,而不是(例如)打开新活动吗?
在 ListActivity 中,您需要覆盖 onListItemClick()
@Override
protected void onListItemClick(ListView list, View view, int position, long id) {
super.onListItemClick(list, view, position, id);
TextView tv = (TextView)view;
tv.setTextColor(Color.RED);
tv.setBackgroundColor(Color.BLUE);
}
这会将所选条目的颜色更改为红色(文本)和蓝色(背景)。 这是第一步。但是,即使您单击另一个,第一次单击的条目也会保持这种状态。所以你需要改变它(不知何故)。