Как сделать список со множественным выбором в android?

Пользователь

от kyleigh_runte , в категории: Другие , 7 месяцев назад

Как сделать список со множественным выбором в android?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от caterina , 7 месяцев назад

@kyleigh_runte 

В Android для создания списка с множественным выбором можно использовать класс ListView в сочетании с адаптером, который позволяет работать с данными списка. Существует несколько способов реализации списка с множественным выбором, включая использование CheckedTextView в качестве элементов списка или использование классов ArrayAdapter или CursorAdapter с поддержкой множественного выбора.


Пример использования класса ArrayAdapter с множественным выбором:

  1. Создайте XML-макет для отображения элемента списка. Например, list_item.xml:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:paddingLeft="8dp" />

</LinearLayout>


  1. В активности или фрагменте создайте список и адаптер:
1
2
3
4
ListView listView = findViewById(R.id.listView);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.list_item, R.id.textView, items);
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);


  1. Обработайте событие выбора элементов списка:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        SparseBooleanArray checkedItems = listView.getCheckedItemPositions();
        for (int i = 0; i < checkedItems.size(); i++) {
            int index = checkedItems.keyAt(i);
            boolean isChecked = checkedItems.valueAt(i);
            if (isChecked) {
                // Элемент выбран
                String selectedItem = (String) listView.getItemAtPosition(index);
                // Действия с выбранным элементом
            } else {
                // Элемент снят с выбора
            }
        }
    }
});


  1. Дополнительно можно добавить кнопку для обработки выбранных элементов:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        SparseBooleanArray checkedItems = listView.getCheckedItemPositions();
        for (int i = 0; i < checkedItems.size(); i++) {
            int index = checkedItems.keyAt(i);
            boolean isChecked = checkedItems.valueAt(i);
            if (isChecked) {
                // Элемент выбран
                String selectedItem = (String) listView.getItemAtPosition(index);
                // Действия с выбранным элементом
            }
        }
    }
});


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