私のアプリケーションでは、タブレットのGmailアプリと同様のことをしたいと思います。左側にはアイテムのリストがあり、右側にはそのアイテムのコンテンツのフラグメントがあります。たとえば、Gmailアプリの場合、このコンテンツは選択後にダウンロードされます。 。アイテムをクリックした後、もちろん選択を変更するまで、強調表示したままにしておきます。これが機能するようになりましたが、同じアイテムを2回クリックした場合にのみ、最初にクリックすると選択が機能し、次にアイテムが「デフォルト」状態に戻り、もう一度クリックするとセレクター(選択済みの場合)状態)が表示されます。
これは私がこれまでに持っているものです:
1)セレクター(listitem_background.xml)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/solid_white" Android:state_pressed="false" Android:state_selected="false"/>
<item Android:drawable="@drawable/listitem_pressed" Android:state_pressed="true"/>
<item Android:drawable="@drawable/listitem_focused" Android:state_selected="true"/>
</selector>
2)リストアイテムの一番上の線形レイアウトの場合:
Android:background="@drawable/listitem_background"
(これもリストセレクターとして設定してみました)
3)これはListViewです:
<ListView
Android:id="@+id/my_list_view"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:choiceMode="singleChoice"
Android:dividerHeight="1dp"
Android:drawSelectorOnTop="true"
Android:fadeScrollbars="true"
Android:fastScrollEnabled="true"
Android:focusable="true"
Android:focusableInTouchMode="true"
Android:scrollbarFadeDuration="100"
Android:scrollbars="vertical" />
4)コード部分で私はこれで遊んでみました:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.setSelected(true);
...
}
[編集]実際、画面の右側でフラグメントをコミットすると、選択が失われることに気づきました。フラグメントをコミットしないと、チャームのように機能します...セレクターに次のようなものが必要だと思います。
<item Android:drawable="@drawable/listitem_focused" Android:state_activated="true" Android:state_focused="false"/>
しかし、明らかにこれではありません...
OK、ついに私の答えを得ました。
アイデアは、セレクターでstate_activateを使用し、
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE)
コード内、または
Android:choiceMode="singleChoice"
もちろん、xmlで
セレクターは次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:drawable="@drawable/solid_white" Android:state_activated="false"/>
<item Android:drawable="@drawable/solid_white" Android:state_activated="false" Android:state_pressed="false"/>
<item Android:drawable="@drawable/listitem_pressed" Android:state_pressed="true"/>
<item Android:drawable="@drawable/listitem_focused" Android:state_activated="true"/>
</selector>
リストアイテムのレイアウトは次のようになります。
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/listitem_background"
Android:orientation="vertical" >
...
<LinearLayout/>
同じ問題に直面した後、アイテムビューxmlに単純な行が必要でした。
Android:background="?android:attr/activatedBackgroundIndicator"