1

次の問題は私を夢中にさせています。次のコードを使用して、xml フラグメントを定義しました。

<fragment class="host.helperclass.ServiceListFragment"
        android:id="@+id/titles"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:layout_width="0px"/>

ServiceListFragment次に、拡張するクラスを実装しましたSherlockListFragment

onActivityCreatedこのコードを使用して、メソッドをオーバーライドしました。

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setDividerHeight(2);
getListView().setBackgroundColor(Color.parseColor("#EEEEEE"));
getListView().setCacheColorHint(Color.parseColor("#00000000"));
getListView().setSelector(R.drawable.list_selector);

list_selector.xml非常に単純な場所は次のとおりです。

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

しかし、ボタンを押したときにのみ、アイテムの緑色の背景が追加されます。離すと、緑色の背景が削除されます。state_selectedが認識されていないようです。これは可能ですか?もしそうなら、内部のアイテムの選択を有効にする方法はありますListViewか?

ノート:

また、アイテムが1つだけのセレクターを使用しようとしました:

 <item android:state_focused="true"
        android:drawable="@drawable/green" />

その結果、ListViewアイテムを押すと背景が緑色になり、離すと緑色の背景が削除されます。アイテムから指を離すと、アイテムのフォーカスが失われたようです。

編集:

私は別の試みをしました。

onListItemClick メソッド内に次のコード行を追加しました。

getListView().setItemChecked(index, true);

私のxmlセレクターには、このアイテムのみを入れました:

  <item android:state_checked="true"
        android:drawable="@drawable/green" />

しかし、奇妙なことに、これは機能しません。

4

3 に答える 3

1

単一選択モードの正しい状態は だと思いますandroid:state_activated

リストにセレクターを使用していることに気付きました。

リスト行 (アダプターで使用するもの) の背景として使用する必要があります。

例えば:

行の背景.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_activated="true"
         android:drawable="@drawable/green"/>
</selector>

row_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/row_background">

    <!-- your views -->

</LinearLayout>
于 2013-10-20T11:30:27.983 に答える
0

問題が見つかりました。

カスタム アダプターで使用される行の xml レイアウトを定義するために、この行をルート要素に追加する必要がありました。

android:background="?android:attr/activatedBackgroundIndicator"

ただし、この属性activatedBackgroundIndicatorは API レベル 11 から導入されているため、以前のバージョンの xml を layout フォルダーに配置し、新しいバージョンを layout-v11 フォルダーに配置しました。

また、onListItemClickメソッド内に次のステートメントが必要です。

getListView().setItemChecked(position, true);
于 2013-10-20T15:18:24.917 に答える
0

これを試して。

このアイテムをセレクターに追加

<item android:state_selected="true"
      android:state_pressed="false"
      android:drawable="@drawable/green" />

そして取り除く

<item android:state_selected="true"
      android:drawable="@drawable/green"/>
于 2013-10-20T13:05:48.820 に答える