11

私のアプリケーションでは、タブレットの 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"

(これもlistselectorとして設定してみました)

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"/>

しかし、明らかにこれではありません...

4

2 に答える 2

45

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/>
于 2012-10-05T10:18:38.063 に答える
4

同じ問題に直面したため、アイテム ビュー xml に単純な行が必要でした。

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

この投稿は役立つかもしれません

于 2013-08-03T21:31:53.473 に答える