2013-08-03 1 views
1

Я пытаюсь использовать ListView внутри ящика навигации моего приложения. Я хочу, чтобы люди выбирали несколько элементов в этом ListView (соответствующие некоторым тегам в моем приложении) и показывали, какие из них выбраны для пользователя.Состояние выбора Android для выбранных элементов в android 2.3?

Я использую следующие рисунки на Android> = 4.0, которые заданы в качестве фона для всех элементов в моем списке.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true" android:drawable="@drawable/list_pressed_holo_light" /> 
    <item android:drawable="@color/transparent" /> 
</selector> 

И он отлично подходит для этой версии. Но на Android 2.3 (эмулятор) он не отображает обратную связь после его выбора.

Я также пробовал другой, которые селекторный вводимый коэффициент не работают лучше на моем эмуляторе, такие как

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

Обратите внимание, что в моем Java коде, я использую следующую строку, чтобы установить выбранный элемент, когда пользователь нажмите на него:

this.mDrawerList.setSelection(position); 
+0

Вы пробовали использовать state_selected вместо state_activated? – Jonathan

+0

@ Джонатан все тот же, если я заменю state_activated state_selected. Даже я стараюсь как ... – MagicMicky

ответ

1

Так что, похоже, ваша проблема в том, что state_activated параметр не был введен до уровня API 11, ака Android 3.0. К счастью, есть надежда для вас; взгляните на this tutorial и посмотрите, выполнит ли он работу.

+2

Кроме того, он действительно не выполняет свою работу. Он работает для API> 3.0 (как в моем приложении), но не в API <3.0. С помощью этого руководства вы можете просто избежать сбоев в API <3.0 (и у меня не было сбоя). Но именно здесь возникает проблема. – MagicMicky

2

Итак, благодаря комментарию к учебнику, опубликованному Джонатаном, мне удалось найти обходное решение.

Поскольку state_activated как только добавлено на уровне 11 API Android, устаревшее устройство не может его использовать. Но они могут использовать state_checked, поэтому вам просто нужно добавить папку layout-v11, которая содержит ваш макет uptodate (для меня это был TextView) и поместил в папку layout макет старой версии android, который можно проверить (для меня это был CheckedTextView).

Затем на вашем list.onItemClickListener теперь вы можете можете проверить API лвл и if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB), а затем просто проверить CheckedTextView viewClicked.setChecked(!viewClicked.isChecked());

+2

в моем случае CheckedLinearLayout, я думаю, что команда Google Android должна исправить это, поскольку это не решение для фрагментации или каким-то образом ее минимизация. – Mikey