android - 在 Android ListActivity onListItemClick 中更改项目的背景颜色

标签 android listview listactivity

我知道这听起来很简单,还有关于这个的问题。但它们都不能解决我的问题。所以我们开始吧:

我想在用户单击时更改 ListActivity 中列表项的背景颜色,并在用户再次单击时将其更改回原始颜色(即选择/取消选择项目的外观)

我尝试使用 getChildAt,如果我无需滚动即可在一个屏幕上看到所有项目,它会完美运行。

代码:

getListView().getChildAt(position).setBackgroundColor(Color.CYAN);

当我在列表中有更多项目并且用户必须滚动浏览它们时,问题就开始了。更改项目的背景后,背景颜色会在我滚动时显示在新可见的项目上。此外,当再次单击项目时,getChildAt(position) 返回 null(因此返回 NullPointerException)。

任何人都可以帮我写一个简单的代码来帮助我更改列表项的背景颜色吗?

提前致谢!

最佳答案

没问题。我会在自定义 ListAdaptergetView() 方法中执行此操作。

MyAdapter extends SimpleAdapter {
    private ArrayList<Integer> coloredItems = new ArrayList<Integer>();

    public MyAdapter(...) {
        super(...);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = super.getView(position, convertView, parent);

        if (coloredItems.contains(position)) {
            v.setBackgroundColor(Color.CYAN);
        } else {
            v.setBackgroundColor(Color.BLACK); //or whatever was original
        }

        return v;
    }
}

单击列表项时更新 coloredItems

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    if (coloredItems.contains(position)) {
        //remove position from coloredItems
        v.setBackgroundColor(Color.BLACK); //or whatever was original
    } else {
        //add position to coloredItems
        v.setBackgroundColor(Color.CYAN);
    }
}

关于android - 在 Android ListActivity onListItemClick 中更改项目的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12610695/

相关文章:

java - 在 Android 上接收和阅读 GATT 通知

android - 如何将EditText中的文本显示到ListView中?

android - 5.1 上的 ListView 滚动错误

android - 有没有办法用 ArrayAdapter 更新多个 TextView?

android - 如何使用列表 Activity 文件更改列表项的颜色

java - Android 解析推送

android - 清除除 android 中的一个以外的所有 Activity

android - ListActivity getView - 进度条或在后台执行?

Android fragment 和依赖注入(inject)

WPF ListView 关闭选择