1

我正在开发一个项目,在该项目中,我需要在选择 ListView 的项目时更改 ListView 中的文本颜色。

我可以在选择列表项时更改文本的颜色,但是几秒钟后,颜色会变回原来的颜色。在单击另一个列表项之前,我希望该颜色保持不变。看看下面的截图:

在此处输入图像描述

单击 ListView 的项目时,我可以将更改后的颜色文本变为白色,但几秒钟后,文本会变回以前的颜色。

我想保持 textview 的白色,直到我单击 ListView 的其他项目。

以下是我的 textviews 选择器文件。对于黑色文本:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true"  android:color="@android:color/white"/>
    <item android:state_focused="true"  android:color="@android:color/white"/>
    <item android:state_selected="false" android:color="@android:color/black"/> 
</selector>

对于红色文本:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="@android:color/white"/>
    <item android:state_focused="true" android:color="@android:color/white"/>
    <item android:state_selected="false" android:color="@color/red"/>
</selector>
4

1 回答 1

5

您需要将所选项目的位置存储在某处并覆盖getView适配器的位置,以便在回收视图时正确设置背景。此外,您还需要告诉您的适配器在项目被选中时刷新视图。

如果您使用ArrayAdapter,例如可以像这样扩展它:

private class SelectionArrayAdapter extends ArrayAdapter<String> {

    private int selectedItem = -1;

    public SelectionArrayAdapter(Context context, int resource, String[] objects) {
        super(context, resource, objects);
    }

    public void setSelection(int position) {
        selectedItem = position;
        notifyDataSetChanged();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        if(position == selectedItem) {
            view.setBackgroundColor(Color.RED);
        }
        else {
            view.setBackgroundColor(Color.TRANSPARENT);
        }
        return view;
    }
}

当单击一个项目时,您只需要调用该setSelection方法:

    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            adapter.setSelection(position);
        }
    });
于 2012-11-26T08:39:26.470 回答