1

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

但这个解决方案不能正常工作。它将背景颜色设置为多于一个列表行。同一个人可以帮助我吗?

4

2 回答 2

1

那是因为convertView正在重用,并且您没有更新两种情况的选定状态(选定/未选定)。setSelected(false)当它不是您要选择的项目时,您需要调用并重置背景颜色。setPressed此外,不需要调用 to 。

您还应该检查ColorStateList这将允许您定义各种状态的颜色。然后,您可以只使用对单个项目选择的内置支持。

于 2013-08-19T19:23:16.920 回答
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);
}

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

于 2013-08-19T19:23:00.200 回答