3

私は多くの同様の質問を見てきましたが、すべての回答は問題に非常に固有のものであり、簡単な回答ではありません。または、選択した項目でチェックされるチェックボックスを作成する方法を示すチュートリアルを見つけました. そして、それらのコードからそれを行う方法を理解するのに苦労しています。

私はここにあるチュートリアルに従っていますが、それは私のコードが異なる名前だけに見える方法です。

項目を選択すると、選択した項目をマークするために背景色が変更されます。

たぶん、カスタムセレクターを使用してこれを達成できますか? 一般的な方法は、選択した位置を保存し、getView 関数で何かを行うことだと理解しました。ViewHolder を作成している人を見ましたが、それが何と関係があるのか​​ よくわかりませんでした。誰か助けてくれませんか?

前もってありがとう、エリック

4

3 に答える 3

13

さて、私は最終的にそれを解決しました、これが誰かに役立つことを願っています:

私がしたArrayList<Integer>ことは、選択したアイテムのすべての位置を保存し、クリック時に背景色を切り替える を作成しました。

私のアダプターでは、次を定義します。

public ArrayList<Integer> selectedIds = new ArrayList<Integer>();

次の方法で:

    public void toggleSelected(Integer position)
{
    if(selectedIds.contains(position))
    {
        selectedIds.remove(position);


    }
    else
    {
        selectedIds.add(position);
    }
}

ArrayList からアイテムを追加\削除します

私のgetViewメソッドで:

            if (selectedIds.contains(position)) {
            convertView.setSelected(true);
            convertView.setPressed(true);
            convertView.setBackgroundColor(Color.parseColor("#FF9912"));
        }
        else
        {
            convertView.setSelected(false);
            convertView.setPressed(false);
            convertView.setBackgroundColor(Color.parseColor("#000000"));
        }

これは、位置が ArrayList に格納されているかどうかを確認します。その場合は、選択したとおりにペイントします。そうでない場合は、その逆です。

残っているのはOnItemClickリスナーだけです。追加しました:

    ((YourAdapter)list.getAdapter()).toggleSelected(new Integer(position));

YourAdapter が ListView のアダプターである場合

これは一般的な答えであるため、これが誰にも役立つことを願っています:)

于 2012-05-04T12:37:14.293 に答える
0

プレーンな XML ソリューションがあります。以下の構文は WRT API 15 です。次のリスト項目テンプレートを使用しました。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/item_selection">
    <ImageView />
    <.. />
</LinearLayout>

res/drawable-hdpi (Android Studio 0.8.14) の item_selection.xml ファイルを指しています。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@android:color/holo_blue_dark" android:state_selected="true" />
</selector>
于 2014-11-23T20:43:37.583 に答える