Сохранить элемент списка highlite с помощью SimpleCursorAdapter

#java #android #sqlite #list #user-interface

#java #Android #sqlite #Список #пользовательский интерфейс

Вопрос:

я реализую splitview, используя новый фрагмент из Google (Android 3).

когда пользователь выбирает что-то из списка, это показывает значение в области сведений и сохраняет выделение элемента списка.

когда я использовал адаптер массива, он сохраняет элемент списка сфокусированным после добавления следующего:

 getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setItemChecked(postition, true);
  

но когда я переключаюсь на использование базы данных с использованием SimpleCursorAdapter и пользовательского XML-файла строки, он выделяется только при нажатии.

«я хочу сохранить выделенный элемент в виде списка»

Ответ №1:

Вам необходимо установить активированный стиль для вашей строки списка. Загвоздка в том, что это доступно только на уровне API 11 и выше.

Один из способов сделать это — использовать два отдельных стиля. В res/values-v11/styles.xml , вы могли бы:

 <?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="activated" parent="android:Theme.Holo">
    <item name="android:background">?android:attr/activatedBackgroundIndicator</item>
  </style>
</resources>
  

Принимая res/values/styles.xml во внимание, что у вас было бы:

 <?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="activated">
  </style>
</resources>
  

Затем ваш макет строки будет использовать этот activated стиль, например:

 <?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@android:id/text1"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:textAppearance="?android:attr/textAppearanceLarge"
  android:gravity="center_vertical"
  android:layout_marginLeft="4dip"
  android:minHeight="?android:attr/listPreferredItemHeight"
  style="@style/activated"
/>
  

В сочетании с вашей существующей CHOICE_MODE_SINGLE логикой это приведет к активации вашей строки после ее нажатия.

Комментарии:

1. СПАСИБО, Я ПРОВЕРЮ ЕГО И ВЕРНУСЬ К ВАМ С ВОПРОСОМ ИЛИ ЗАДАМ КАК ПРИНЯТЬ.

2. спасибо, это сработало, но как изменить цвет метки и в чем смысл значений-v11

3. @ahmed: «как изменить цвет метки» — измените, на что указывает android:background значение в стиле. Прямо сейчас он указывает на значение ( android:attr/activatedBackgroundIndicator ) из определяемой системой темы. «в чем смысл значений-v11» — Android будет использовать ресурсы в этом каталоге на устройствах с уровнем API 11 и выше. Старые устройства будут игнорировать этот каталог.

4. Не знаю, кто проголосовал за этот ответ, но он абсолютно правильный.