Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
mikl35
4 / 4 / 0
Регистрация: 30.05.2014
Сообщений: 129
#1

Множественный выбор в списке - Программирование Android

10.09.2014, 22:25. Просмотров 654. Ответов 1
Метки нет (Все метки)

Создал список в активити и в отдельном XML файле написал как будет выглядеть этот список с двумя текстовыми строками, но как добавить флажки в виде галочек для множественного выбора, в адаптере жалуется ошибка выходит, вот сам адаптер:
Java
1
2
3
4
5
6
7
8
 SimpleAdapter adapter = new SimpleAdapter(this,
                nPhones,
                R.layout.list, new String[]{ // массив названий
                NPHONE,         //верхний текст
                OPIS,        //нижний теккт
                }, new int[]{    //массив форм
                R.id.text1,      //наш id TextBox'a в list.xml
                R.id.text2});
То есть с обычным списком там просто ставишь simple_list_item_multiple_choice
Но этот список он состоит из отдельной разметки XML, то есть создал listView и его (списка) описание элементов в другом XML файле. В адаптере не прописать simple_list_item_multiple_choice, что делать то?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2014, 22:25     Множественный выбор в списке
Посмотрите здесь:

Множественный выбор в listview - Программирование Android
вот так создается список class AdapterHelper{ String name = {"Первый","Второй","Третий"}; int img =...

ListView множественный выбор несмотря на SingleChoice mode - Программирование Android
Здравствуйте! Столкнулся с проблемой: использую listview со своим Adapter-ом, наследуем от BaseAdapter-а, с переопределенными методами...

Размер строк в списке - Программирование Android
Пробую написать некое подобие зума строк в списке. Написал свой адаптер. Задаю сложные (многокомпонентные) строки списка как xml. ...

Как скрыть CheckBox в списке? - Программирование Android
Есть ListView, в нем item'ы с чекбоксами, нужно по кнопке включать режим мультивыбора, т.е. пока не нажмешь кнопку, чекбоксы в списке не...

Виджет не появляется в списке виджетов - Программирование Android
Разбираю урок 117 проекта startandroid, делаю все как в уроке, но виджет не появляется в списке. Мне кажется, дело в том, что у меня в...

Виджет Android 4.1 не появляется в списке - Программирование Android
Добрый вечер, уважаемые форумчане. Учусь создавать приложения для андройда, добрался до виджетов. В уроке размещенном на сайте...

Вывод Elements в списке. Jsoup - Программирование Android
Здравствуйте! Я только начал изучать программирование под Android. Пробовал выводить список, по одному из уроков, и тем на этом сайте....

Ошибка когда ставлю галочку в списке - Программирование Android
Здравствуйте, вообщем в одной активити список, жму в этой активити кнопку добавить и перехожу на другую активити, там ввожу имя для списка...

На телефоне виджет не появляется в списке виджетов - Программирование Android
Добрый день! Сделал виджет - устанавливается и работает на планшете Asus Transformer Устанавливаю на телефон Fly IQ444 Quattro -...

Получить индекс элемента в кастомном списке - Программирование Android
Добрый день. У меня имеется кастмоный список, состоящий из двух и более элементов. Например, я кликнул по 2 элементу списка, длина которого...

Как сделать подзаголовки в списке listView - Программирование Android
Я допустим хочу в Списке ListView какие то элементы списка чтобы находились под одним подзаголовком, как мне это реализовать, чтобы вышло...

Ошибка в прокручиваемом списке внутри фрагмента - Программирование Android
Большинство ошибок таки сумел подправить. Осталось последняя: linLayout - Главный лайаут Фрагмента item - другой лайаут ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max_92
25 / 7 / 2
Регистрация: 26.04.2010
Сообщений: 205
11.09.2014, 01:06     Множественный выбор в списке #2
Ты передал адаптеру кастомную разметку R.layout.list, зачем тогда android.R.simple_list_item_multiple_choice ? В своей разметке добавляй CheckBox в нужном месте. В колбеке onItemClick как вариант можно чекать чекбокс элемента в выбранной позиции. Но в любом случае, если ты захочешь узнать, какие чекбоксы чекнуты, метод getCheckedItemPositions() ListView будет возвращать неверное значение.
А вообще в нестандандартных случаях надо создавать свой адаптер на основе подходящего для данной задачи, и в нём переопределять метод public View getView(int position, View convertView, ViewGroup parent), который вызывается всякий раз, когда необходимо прорисовать вьюхи элемента конкретной позиции, столько, сколько влезает на экран. Т.е. например ты создал свой адаптер с нужным набором данных, после чего выставил этот адаптер для ListView, и автоматически сработал, 7 раз например, колбек getView, в котором ты сам выставляешь содержимое View элементов. Аналогично происходит при прокрутке и при ручном вызове notifyDataSetChanged(), когда это необходимо. Также в филдах можно сделать массив / hashmap / list, содержащий индексы элементов <-> boolean чекнут/не чекнут, и тогда в getView смотря в этот набор данных ты будешь вызывать setChecked(). Для того, чтобы узнать, какие элементы чекнуты, можно просто спросить об этом свой адаптер, получив этот самый набор boolean'ов. Вот на этом примере, надеюсь, будет понятно.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import java.util.ArrayList;
 
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
 
public class FoldersArrayAdapter extends ArrayAdapter<String> {
 
    private static final String TAG = "FoldersArrayAdapter";
 
    private final LayoutInflater mInflater;
    // private final Context mContext;
    private final int layout;
    private final ArrayList<String> foldersPathsList;
 
    private final boolean checkedPositions[];
 
    public FoldersArrayAdapter(Context context, int layout, ArrayList<String> foldersList) {
        super(context, layout, foldersList);
        Log.d(TAG, "FoldersArrayAdapter :: FoldersArrayAdapter()");
 
        // mContext = context;
        this.layout = layout;
        foldersPathsList = foldersList;
 
        mInflater = LayoutInflater.from(context);
 
        checkedPositions = new boolean[foldersList.size()];
        for (int i = 0; i < checkedPositions.length; i++) {
            checkedPositions[i] = false;
        }
    }
 
    // if callback getView is overriden, callbacks newView and bindView will not
    // be called
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
 
        // convertView - The old view to reuse, if possible
        // position - The position of the item within
        // listprefs_choice_mode_entry_valuesthe adapter's data set of
        // the item whose view we want.
        // parent - The parent that this view will eventually be attached to
 
        ViewHolder viewHolder;
 
        if (convertView == null) {
 
            if ((layout == android.R.layout.simple_list_item_single_choice)
                    || (layout == android.R.layout.simple_list_item_multiple_choice)) {
                convertView = mInflater.inflate(layout, parent, false);
            } else {
                return null;
            }
 
            viewHolder = new ViewHolder();
            viewHolder.folderNameView = (CheckedTextView) convertView.findViewById(android.R.id.text1);
 
            convertView.setTag(viewHolder);
 
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
 
        if (foldersPathsList != null) {
 
            ViewGroup.LayoutParams layoutParams = viewHolder.folderNameView.getLayoutParams();
            layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
            // layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
            viewHolder.folderNameView.setLayoutParams(layoutParams);
 
            viewHolder.folderNameView.setText(foldersPathsList.get(position));
 
            if (layout == android.R.layout.simple_list_item_multiple_choice) {
                viewHolder.folderNameView.setChecked(checkedPositions[position]);
            }
 
        }
 
        return convertView;
    }
 
    public void setCheckPosition(int position, boolean checked) {
        checkedPositions[position] = checked;
    }
 
    private static class ViewHolder {
        CheckedTextView folderNameView;
    }
 
}
Добавлено через 7 минут
корректировка небольшая

Java
1
2
3
4
5
6
7
8
9
10
11
    private final boolean[] checkedPositions;
 
        public boolean[] getCheckedPositions() {
        return checkedPositions;
        }
 
        public void setCheckPosition(int position, boolean checked) {
                if (position >= 0 && position < checkedPositions.length) {
        checkedPositions[position] = checked;
                }
    }
Yandex
Объявления
11.09.2014, 01:06     Множественный выбор в списке
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru