web-dev-qa-db-ja.com

Android:リストビューアイテムを「選択済み」に設定(強調表示)

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

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

11
Ciprian

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/>
45
Ciprian

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

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

この投稿

4
Joan P.S