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

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

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

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

10.09.2014, 22:25. Просмотров 697. Ответов 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, что делать то?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2014, 22:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Множественный выбор в списке (Программирование Android):

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

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

Выбор SIM карты, с которой необходимо произвести выбор - Программирование Android
Добрый день! Пошерстил форум, но так и не нашел чего-то, что смогло бы мне определенно помочь. Дело в том, что разрабатываю...

1C 7.x Множественный выбор - 1С
Подскажите как реализовать множественный выбор или как правильно сделать.Нужно чтобы в поле табчасти документа выбирать несколько...

Множественный выбор. - C++
У меня есть задание См. Рисунок. задание не тяжёлое я его сделал , но захотел проверить как всё работает. Что бы ввести асе года сразу я...

множественный выбор - C++
Добрый день, ув. форумчани. Не подскажите как с помощью оператора switch сделать множественный выбор, то есть я что-то выбрал и мне снова...

1
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;
                }
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2014, 01:06
Привет! Вот еще темы с ответами:

Множественный выбор - C++
Доброго времени суток. Программа запускается, но когда вводишь символ - процедуры пролетают все разом. Т.е. операторы ввода в процедурах...

Множественный выбор - PascalABC.NET
Написать программу, которая по номеру дня недели - целому числу от 1 до 7 будет выдавать в качестве результата количество уроков в классе в...

Множественный выбор - MS Access
Здравствуйте, подскажите возможно ли проделать такую операцию: в таблице excel имеется поле, где записаны данные например - &quot;Иванов,...

Множественный выбор - 1С
Здравствуйте, есть справочник там много записей удалять и перемещать по одному это хоть весь день сиди. Читал, что галочку в...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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