使用SimpleAdapter的Android ListActivity - 突出显示所选项目

时间:2013-08-19 19:05:41

标签: android list listview highlight simpleadapter

我在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;
        }

但此解决方案无法正常运行。它将背景颜色设置为多于一个列表行。 那个人可以帮助我吗?

2 个答案:

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

这会将所选条目的颜色更改为红色(文本)和蓝色(背景)。 这是第一步。但是,即使您单击另一个,第一次单击的条目也会保持这种状态。所以你需要改变它(不知何故)。

相关问题