2

マスター/ディテールの ListView セットアップがあり、マスター フラグメントで選択した項目の背景を変更したいと考えています。

以前は次のコードを使用していましたが、これでは本格的なセレクターを使用できません。

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

        // Highlight selected item
        if (position == selectedPos) {
            view.setBackgroundColor((view.getResources()
            .getColor(R.color.nw_white)));
        } else {
            view.setBackgroundColor((view.getResources()
            .getColor(R.color.nw_grey)));
        }
        return view;
    }

正常に動作しますが、セレクターを使用したいです。(フォーカスとクリックでアイテムの背景を適切に変更したいためです。)

だから私はそれを次のように変更しました:

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

        // Highlight selected item
        if (position == selectedPos) {
            view.setSelected(true);
            // view.setBackgroundColor((view.getResources()
            // .getColor(R.color.nw_row_download_master_selected)));
        } else {
            view.setSelected(false);
            // view.setBackgroundColor((view.getResources()
            // .getColor(R.color.nw_row_download_master_normal)));
        }
        Log.d(TAG, "pos " + position + " is selected: "
            + view.isSelected());

        return view;
    }

リストの行は次のようになります。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/selector_row_collection_master"
    android:orientation="horizontal"
    >

   ...
</LinearLayout>

そして、セレクターは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/row_master_detail_pressed"
          android:state_pressed="true" />
    <item android:drawable="@drawable/row_master_detail_focused"
          android:state_focused="true" />
    <item android:drawable="@color/nw_row_master_master_selected"
          android:state_selected="true" />
    <item android:drawable="@color/nw_row_master_normal" />
</selector>

ロガーがビューが実際に選択されていると言っているにもかかわらず、行はクリックイベントに応答しますが、選択されたことには応答しません! 何が起こっている?

4

3 に答える 3

4

選択済みに設定されているにもかかわらず、ビューが選択済みとして表示されない理由はわかりませんが、次のコードは機能するはずです。

使用ListView.setItemChecked():

mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
mListView.setItemChecked(position, isActivated);

セレクタ:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/row_master_detail_pressed"
          android:state_pressed="true" />
    <item android:drawable="@drawable/row_master_detail_focused"
          android:state_focused="true" />
    <item android:drawable="@color/nw_row_master_master_selected"
          android:state_activated="true" />
    <item android:drawable="@color/nw_row_master_normal" />
</selector>

android:state_activatedはポストハニカムでしか利用できないため、これを に追加しgetView()ます。

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
                // Highlight selected item
                if (position == selectedPos) {
                    view.setBackgroundColor((view.getResources()
                            .getColor(R.color.nw_row_master_selected)));
                } else {
                    Drawable sel = view.getResources().getDrawable(
                            R.drawable.selector_row_collection_master);
                    view.setBackgroundDrawable(sel);
                }
            }
于 2013-08-20T10:14:04.027 に答える
1

を使用する必要があります。https://stackoverflow.com/a/13634298/1283554state_activatedは表示されません。state_selected

  • リストを選択可能にします android:choiceMode="singleChoice"ListView

  • 'state_activated="true"状態をアイテムの背景としてセレクターを使用する

  • myListView.setItemChecked(position, true)ListViewでアイテムを選択します

注 : state_activatedHoneycomm 以降でのみ使用可能です。古いバージョンでは、セレクターだけではできないと思います。おそらく背景を設定する必要があります getView

于 2013-08-20T10:15:12.933 に答える
1

を設定し、のを削除するselector必要があります。をとして設定するだけです。お役に立てれば。item viewselectorlist-viewlist-viewselector@null

于 2013-08-20T10:05:32.483 に答える