Intereting Posts
Список зарезервированных слов в Android Android / layout: как создать компоновку заголовка Как добавить изображение в тело электронной почты Как показать индикатор выполнения (круг) в операции, имеющей список, перед загрузкой списка с данными Android 4.2.2 делает иконку и заголовок значка программы активным, как будто часть одной и той же кнопки Android: ProgressDialog.show () падает с getApplicationContext Как работать с большим объектом JSON на Android Как реализовать 2 разных типа разделителей (т. Е. Заголовков) в классе адаптера ListView Как добавить WebView в виджет? Светодиодный фонарик на Galaxy Nexus, управляемый каким API? Как запретить блокировку рекламы в приложении Преобразование строки, содержащей идентификатор, в идентификатор целого числа Как использовать неофициальный API Android Market? Как получить высоту клавиатуры, когда активность создана в android Как проверить устройство Android – это экран HDPI или экран MDPI?

Нужна помощь с селектором цветов для отмеченных элементов ListView

У меня есть ListView с настраиваемым макетом для его элементов, и вам нужно указать отдельный цвет фона для отмеченных элементов с помощью селектора. Вот селектор для нечетных элементов:

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@android:color/black" /> <item android:state_checked="true" android:drawable="@android:color/black" /> <item android:state_selected="true" android:drawable="@color/red" /> <item android:drawable="@android:color/white" /> </selector> 

И вот селектор для четных элементов:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@android:color/black" /> <item android:state_checked="true" android:drawable="@android:color/black" /> <item android:state_selected="true" android:drawable="@color/red" /> <item android:drawable="@color/gray" /> </selector> 

Элемент списка ListView выглядит так:

 <?xml version="1.0" encoding="utf-8"?> <com.androidhub.core.CheckableLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="40dip"> <TextView android:text="TextView" android:id="@+id/textView1" android:layout_height="fill_parent" android:layout_width="wrap_content" android:gravity="center_vertical" android:textColor="@color/list_item"></TextView> </com.androidhub.core.CheckableLinearLayout> 

Корневым элементом элемента списка является CheckableLinearLayout: http://paste.org/pastebin/view/28711

ListView имеет один режим выбора (я также пробовал режим множественного выбора, но он также не работает для меня)

 public class MainActivity extends ListActivity { List<String> items = new ArrayList<String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); items.add("test 1"); items.add("test 2"); items.add("test 3"); items.add("test 4"); getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); getListView().setAdapter(new TestAdapter(this, items)); getListView().setBackgroundColor(getResources(). getColor(android.R.color.white)); } } 

В адаптере для этого ListView я вызываю метод setChecked () CheckableLinearLayout, но он не меняет цвет:

 @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(getContext()); View v = convertView; if(v == null) { v = inflater.inflate(R.layout.list_item, null); } if(position % 2 != 0) { v.setBackgroundResource(R.drawable.list_item_even); } else { v.setBackgroundResource(R.drawable.list_item_odd); } if(parent instanceof ListView) { ListView lv = (ListView)parent; if(v instanceof CheckableLinearLayout) { CheckableLinearLayout cll = (CheckableLinearLayout)v; cll.setChecked(lv.isItemChecked(position)); } } return v; } 

Что я делаю неправильно? Я вижу, что элемент state_pressed из селектора работает нормально, а state_checked – нет. Каким будет правильный подход к настройке фона state_checked из XML, а не кода?

Solutions Collecting From Web of "Нужна помощь с селектором цветов для отмеченных элементов ListView"

Я думаю, вы ищете этот атрибут:

 android:duplicateParentState="true" 

Попробуйте добавить его в свой тег CheckableLinearLayout в свой макет ячейки.

Ключевое нажатие / освобождение – это единственное событие, которое распространяется на дочерние представления ViewGroup, поэтому каждое представление будет управлять своим собственным состоянием, если вы явно не скажете ему использовать его родителей.

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

 if(parent instanceof ListView)... 

Попробуйте реализовать getListView (). SetOnItemClickListener:

 OnItemClickListener listener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { CheckableLinearLayout r; for(int i = 0; i< lv.getChildCount(); i++) { r= (CheckableLinearLayout)lv.getChildAt(i); if(i==position) r.setChecked(true); else r.setChecked(false); } } }; 

Пробовали ли вы создать XML для хранения списка ListView, подобного этому? В теге @ + id / android: list есть какое-то волшебство.

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/megaphone_320x480"> <ListView android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/megaphone_320x480" android:cacheColorHint="@drawable/transparent" /> <TextView android:id="@id/android:empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@drawable/red" android:gravity="center_vertical|center_horizontal" android:textStyle="bold" android:text="@string/error_no_groups" /> </LinearLayout>