WedX - журнал о программировании и компьютерных науках

выбранные элементы в представлении списка не выделяются

Я пытаюсь реализовать MultiChoiceModeListener для использования контекстной панели действий в моем фрагменте (библиотека поддержки v4). Но у меня проблемы с отображением того, что элемент в представлении списка был выбран. Я ожидаю, что выбранные элементы будут выделены. На самом деле происходит то, что отображается только панель действий, показывающая количество выбранных элементов, но нет указания на то, какой элемент был выбран.

    if (Utils.hasHoneycomb()) {
        Log.d("faizal","has honeycomb");

        //Enable selection of multiple chat messages
        lv_chatMessages.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

        //Handle Action mode events
        lv_chatMessages
                .setMultiChoiceModeListener(new MultiChoiceModeListener() {

                    @Override
                    public boolean onActionItemClicked(ActionMode arg0,
                            MenuItem arg1) {
                        // TODO Auto-generated method stub
                        return false;
                    }

                    @Override
                    public boolean onCreateActionMode(ActionMode mode,
                            Menu menu) {
                        Log.d("faizal","oncreateactionmode");
                        MenuInflater inflater = mode.getMenuInflater();
                        inflater.inflate(R.menu.chatsession_contextmenu, menu);
                        return true;
                    }

                    @Override
                    public void onDestroyActionMode(ActionMode arg0) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public boolean onPrepareActionMode(ActionMode arg0,
                            Menu arg1) {
                        // TODO Auto-generated method stub
                        return false;
                    }

                    @Override
                    public void onItemCheckedStateChanged(ActionMode mode,
                            int position, long id, boolean checked) {
                        Log.d("faizal","onItemCheckedStateChanged : " + position);
                        mode.setTitle(lv_chatMessages.getCheckedItemCount() + " selected");

                    }

                });
    }

Я пытался использовать listview.setSelection(position) в onItemCheckedStateChanged(), но это не имело никакого значения.

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

chat_list_item.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:id ="@+id/wrapper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/rowselector">

        <TextView
            android:id="@+id/txt_chat"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_gravity="center"
            android:focusable="false"
            />

        </LinearLayout>
</LinearLayout>

rowselector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="https://schemas.android.com/apk/res/android">

    <item android:state_selected="true" android:drawable="@color/yellow" />

</selector>

Итак, есть ли способ указать, какие элементы были выбраны?

07.06.2014

  • Вам нужен state_activated в селекторе. 07.06.2014

Ответы:


1

Используйте state_activated вместо state_selected в rowselector.xml :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="https://schemas.android.com/apk/res/android">

    <item android:state_activated="true" android:drawable="@color/yellow" />

</selector>

Благодаря @Luksprog

07.06.2014

2

Измените свой селектор на этот

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="https://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/button_bg_normal" android:state_selected="true"></item>
    <item android:drawable="@drawable/button_bg_pressed" android:state_pressed="true"></item>
    <item android:drawable="@drawable/button_bg_normal"></item>

</selector>
07.06.2014
  • Извините, я по ошибке обновил ваш ответ на основе комментария @Luksprog. Не знаю, как это отменить. 07.06.2014
  • Оно было отклонено как недействительное редактирование в очереди на редактирование, не беспокойтесь. 07.06.2014
  • @Leigh Где сейчас мой первоначальный ответ? Будет ли он восстановлен? 07.06.2014
  • Я вернул его к исходному содержанию для вас, учитывая, что это было радикальное изменение. 07.06.2014
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

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

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]