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

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

Восстановить пароль Регистрация
 
mikl35
4 / 4 / 0
Регистрация: 30.05.2014
Сообщений: 124
10.09.2014, 22:25     Множественный выбор в списке #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
Вывод Elements в списке. Jsoup Android
Android Размер строк в списке
Android ListView множественный выбор несмотря на SingleChoice mode
Виджет Android 4.1 не появляется в списке Android
Android Ошибка когда ставлю галочку в списке
Android Как скрыть CheckBox в списке?
Android Виджет не появляется в списке виджетов
Получить индекс элемента в кастомном списке Android
Android Ошибка в прокручиваемом списке внутри фрагмента
Android Покрасить первый элемент в выпадающем списке
Android Как сделать подзаголовки в списке listView

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max_92
 Аватар для 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     Множественный выбор в списке
Ответ Создать тему
Опции темы

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