【问题标题】:How to keep the changed color of listiew content unchanged until selecting another item in listview?如何保持列表视图内容的更改颜色不变,直到在列表视图中选择另一个项目?
【发布时间】:2012-11-26 08:28:36
【问题描述】:

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

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

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

我想保持文本视图的白色,直到我单击 ListView 的其他项目。

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

<?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>

【问题讨论】:

    标签: android android-layout android-intent android-emulator


    【解决方案1】:

    您需要将选中项的位置存储在某处并覆盖适配器的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);
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      相关资源
      最近更新 更多