1

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>
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 に答える