Intereting Posts
Android: inputType = "textEmailAddress" – ключ '@' и ключ .com '? Воспроизведение локального аудиофайла в Android-приложении Android Как лучше воссоздать маркеры / полилинии при повороте телефона (изменение ориентации) Java.lang.IllegalArgumentException: Недопустимый символ в схеме с индексом 0: Установите «dev» сборку приложения для Android на боковой рыночной версии Как я могу получить размер папки на SD-карте в Android? API данных Youtube: получить доступ к медиапотоку и воспроизведению (JAVA) В Android, проверяйте, не работает ли база данных sqlite, время от времени VS-код для Android. Является ли это возможным? Перемещение видеофайла, снятого камерой с помощью кордовы (телефонная задержка), не освежает миниатюру галереи Как сделать собственный пользовательский дозвон на Android-телефоне Android UI: когда я могу напрямую изменить представление? Службы Google Play для Android. Клиент местоположения не обновляет местоположение, если Wi-Fi отключен Ограничения видеозахвата в телефонном разрыве + плагины для родных R не может быть разрешено переменной (новый проект Android)

Выбранный элемент в пользовательском listview с контекстной панелью действий

Недавно я начал использовать андроидные панели действий и контекстные панели действий (CAB).

У меня есть только одно действие, которое является ListActivity. В основном я использую следующий код, отрезанный для «активации» CAB:

ListView listView = getListView(); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); listView.setMultiChoiceModeListener(new MultiChoiceModeListener() { @Override public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { // Here you can do something when items are selected/de-selected, // such as update the title in the CAB } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { // Respond to clicks on the actions in the CAB switch (item.getItemId()) { case R.id.menu_delete: deleteSelectedItems(); mode.finish(); // Action picked, so close the CAB return true; default: return false; } } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { // Inflate the menu for the CAB MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.context, menu); return true; } @Override public void onDestroyActionMode(ActionMode mode) { // Here you can make any necessary updates to the activity when // the CAB is removed. By default, selected items are deselected/unchecked. } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { // Here you can perform updates to the CAB due to // an invalidate() request return false; } }); 

Макет списка:

 <ImageView android:id="@+id/message_on_clipboard_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:minWidth="30dp" android:padding="7sp" android:src="@android:drawable/presence_online" > </ImageView> <LinearLayout android:id="@+id/linearLayout2" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/listitem_background" android:orientation="vertical" > <TextView android:id="@+id/message" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginRight="5sp" android:fadingEdge="horizontal" android:singleLine="true" android:text="TextView" android:textAppearance="?android:attr/textAppearanceLarge" > </TextView> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/listitem_background" android:orientation="horizontal" > <TextView android:id="@+id/message_length" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="5sp" android:text="@string/message_length" android:textAppearance="?android:attr/textAppearanceSmall" > </TextView> <TextView android:id="@+id/message_count" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="5sp" android:text="TextView" android:textAppearance="?android:attr/textAppearanceSmall" > </TextView> <TextView android:id="@+id/date_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="5sp" android:text="@string/date_label" > </TextView> <TextView android:id="@+id/date_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" > </TextView> </LinearLayout> </LinearLayout> 

И внутри main.xml:

 <ListView android:id="@+android:id/list" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> 

Теперь, если я сделаю длинный щелчок по элементу списка, CAB появится, как ожидалось:

такси

Я использую MultiChoiceModeListener, но, к сожалению, выбранные элементы списка не меняют фон, как в примере здесь (светло-синий фон после выбора элемента):

Введите описание изображения здесь

Должен ли я использовать настраиваемый селектор? Или есть стандартная процедура, как андроид справляется с этим, и мне просто нужно сделать мой LinearLayouts прозрачным? Я также пробовал следующее, но безуспешно:

Элемент списка ListView с помощью настраиваемого селектора

Было бы здорово, если бы кто-нибудь мог указать мне в правильном направлении. Пожалуйста, дайте мне знать, если вам нужен дополнительный код приложения или xml-файлы.

Solutions Collecting From Web of "Выбранный элемент в пользовательском listview с контекстной панелью действий"

Я тестировал это только в CHOICE_MODE_SINGLE, но в этой ситуации он работает, выполняя следующие действия.

  • Когда вы выбираете элемент списка, в коде, вызовите метод setItemChecked (position, checked) "(в экземпляре ListView) для этого элемента в списке.

  • Добавьте это в XML для отдельных элементов ListView:
    android:background="?android:attr/activatedBackgroundIndicator"

Просто создайте aa drawable под названием custom_background по пути:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/highlight" android:state_activated="true"/> <item android:drawable="@color/normal"/> </selector> 

И установите в качестве фона на родительский макет:

 android:background="@drawable/custom_background" 

Только пытаясь поддерживать устройства ICS и вверх, но этот новый макет делает то, что вы пытаетесь достичь, в том, что выделенная выделенная линия выделена.

 adapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_list_item_activated_1, null, from, to, 0); 

Для тех, кто все еще встречается с этой проблемой, пожалуйста, проверьте свой Android: minSdkVersion. Если он слишком низок, цвет фона селектора может не работать.