Подтвердить что ты не робот

Android: установить элемент списка списка как "выбранный" (выделено)

В моем приложении я хочу сделать что-то похожее на приложение gmail на планшетах, слева, чтобы иметь список элементов и в праве иметь фрагмент с содержимым этого элемента, например, для приложения gmail этот контент загруженный после выбора. После того, как я нажму на элемент, я хочу, чтобы он оставался выделенным до тех пор, пока, конечно, я не изменю выбор. Я достиг точки, где это работает, но только если я дважды нажму на один и тот же элемент, так что сначала я нажимаю, выбирает работу, а затем элемент возвращается в состояние "по умолчанию", и если я снова нажимаю на него, селектор (для выбранного состояние).

Это то, что у меня есть до сих пор:

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);
    ...
}

[EDIT] На самом деле я заметил, что выбор теряется после фиксации фрагмента в правой части экрана. Если я не совершаю фрагмент, он работает как шарм... Я думаю, что мне нужно что-то подобное в селекторе:

<item android:drawable="@drawable/listitem_focused" android:state_activated="true" android:state_focused="false"/>

Но, очевидно, не это...

4b9b3361

Ответ 1

ОК, наконец, получил свой ответ.

Идея заключается в использовании state_activated в селекторе и

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

Ответ 2

У меня возникла одна и та же проблема, а затем мне просто нужна простая строка в моем XML-представлении.

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

Этот пост может помочь