Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
1

Создание ListView с CheckBox из БД

08.04.2014, 20:16. Показов 3056. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, приложение создает БД с полями id, String и Int

_idNameCheck
1Москва1
2Казань0
3Ростов0
4Минск1
5Дели1

Это xml с параметром multipleChoice
Кликните здесь для просмотра всего текста
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:choiceMode="multipleChoice" >
</ListView>

<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:onClick="clickme"
android:text="@string/button_save" />
</LinearLayout>

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class AllList extends Activity {
    ListView choiceList;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.all);
        DB sqh = new DB(this);
        SQLiteDatabase sqdb = sqh.getWritableDatabase();
        Cursor cursor = sqdb.query(DB.TABLE_NAME, new String[] {DB.NAME}, 
            null, null, null, null, null);  
        ArrayList<String> chList = new ArrayList<String>();
        while (cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex(DB.NAME));
            chList.add(name);
        }
        cursor.close();     
        choiceList = (ListView) findViewById(R.id.listView1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_multiple_choice, chList);
        choiceList.setAdapter(adapter);
    } }
C NAME то все просто получилось (хотя думаю что можно и без ArrayList<String> chList обойтись), а вот как еще CHECK вывести в ListView?
Как в курсор запихнуть CHECK и отобразить их значения (true/false) в ListView?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2014, 20:16
Ответы с готовыми решениями:

Checkbox ListView
Как отследить что все Checkbox в ListView не помечены.

ListView и checkbox
Получается так (как на картинке). Мне нужно расположить галочку слева от слова, а не верху. Как это...

Checkbox в listview
Всем привет! добавил в listview checkbox при этом первый столбец - пустой, второй и третий с...

Убрать CheckBox в ListView
Привет, столкнулся с проблемой, при создании ListView c мультивыбором, возле каждого элемента...

12
325 / 123 / 10
Регистрация: 01.11.2012
Сообщений: 586
08.04.2014, 23:47 2
Вам нужно сделать кастомный адаптер для ListView. А там пихайте туда хоть черта лысого. Вот пример создания такого адаптера.

Ну а по поводу как CHECK взять:
Java
1
2
3
4
5
6
7
8
Cursor cursor = sqdb.query(DB.TABLE_NAME, new String[] {DB.NAME,DB.CHECK}, 
            null, null, null, null, null);  
        ArrayList<String> chList = new ArrayList<String>();
        while (cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex(DB.NAME));
            Integer check= cursor.getInteger(cursor.getColumnIndex(DB.CHECK));
            //добавляем в адаптер
        }
...или я вопроса не понял
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
09.04.2014, 10:03  [ТС] 3
Пример посмотрю, спасибо.
А почему в new ArrayAdapter (18 стр) нельзя запихнуть name и чек? Ведь это же массив. Одномерный, из за этого?
А с CursorAdapter нет примера? Он как раз для работы с БД, но в рунете примеров маловато и в основном простейшие, для одного поля.

Добавлено через 28 минут
Вот еще нашел, пока не знаю будет работать или нет.
Java
1
2
3
4
String[] from = new String[] { DB.NAME, DB.CHECK };
int[] to = new int[] { R.id.item_name, R.id.item_check }; // тут надо переделать xml (добавить item_name и item_check)
adapter = new SimpleCursorAdapter(this, R.layout.items, cursor, from, to);
choiceList.setAdapter(adapter);
0
35 / 35 / 2
Регистрация: 12.11.2013
Сообщений: 345
09.04.2014, 13:24 4
BaseAdapter гугли
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
09.04.2014, 15:19  [ТС] 5
Цитата Сообщение от kirawa Посмотреть сообщение
BaseAdapter гугли
В смысле? Это же базовый класс. И как он связан с БД?
0
35 / 35 / 2
Регистрация: 12.11.2013
Сообщений: 345
09.04.2014, 15:54 6
Адаптер - это прокладка между данными и представлением списка. Есть готовые адаптеры, но мне они часто не подходят и я предпочитаю кастомный. Смысл в: 1) получил данные в том виде котором надо или удобно. Я предпочитаю создавать класс с гетерами и сетерами и хранить данные в коллекции 2) Вывел на экран списком с помощью адаптера
1
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
09.04.2014, 19:13  [ТС] 7
kirawa, ну что это прокладка это понятно, я же просто хочу использовать источник и приемник, для этого и существует подкласс CursorAdapter, а от посредника в виде коллекции или массива отказаться. как то так.
0
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746
09.04.2014, 20:45 8
Rube, вот
Цитата Сообщение от dubok79 Посмотреть сообщение
А там пихайте туда хоть черта лысого
- и это действительно так.
1
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
10.04.2014, 08:35  [ТС] 9
Цитата Сообщение от MegaSinner Посмотреть сообщение
и это действительно так.
Кто ж спорит, что это не так, но в примере не то, что нужно.
Опишу как я понимаю:
Вместо Данные(БД) -> Коллекция -> CastomAdapter-> ListView
надо Данные(БД) -> SimpleCursorAdapter -> ListView

SimpleCursorAdapter оказывается устарел, вставил его в проект, а он зачеркнутый. Попробовал CursorLoader, вроде то что нужно, но возникла новая проблема:
При запуске заполняю таблицу, поле CHECK (integer) заполняю методом put единицами, 0/true/false тоже пробовал.
А в ListView почему-то эти данные (1 или 0) стоят справа от чекбокса, типа текст поля.
Как чекать сами чекбоксы?
0
35 / 35 / 2
Регистрация: 12.11.2013
Сообщений: 345
10.04.2014, 11:14 10
охо-хо-хо
0
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746
10.04.2014, 11:24 11
Цитата Сообщение от Rube Посмотреть сообщение
но в примере не то, что нужно
Никто и не говорил, что это будет готовое 100% решение, но того достаточно. Я, к примеру, поняв принцип, сделал кастомный список для своего плеера - там и чекбоксы и куча другой инфы (кликабельной).
А вам нужно всего лишь немного поправить tabitem.xml - убрать лишнее и добавить туда чекбокс, повесив на него листенер (и всё остальное с этим связанное - holder и т.д.). Если чё не ясно по листу, спрашивайте, я тему вкурил.. А в БД я, к сожалению, не асс - поверхностно..

Добавлено через 4 минуты
Цитата Сообщение от Rube Посмотреть сообщение
Как чекать сами чекбоксы?
checkbox.setChecked(true);

Это надо делать с помощью ViewHolder, чтобы при касании пальцем чекало нужный чекбокс.
0
912 / 560 / 88
Регистрация: 13.02.2014
Сообщений: 2,081
10.04.2014, 13:28  [ТС] 12
Цитата Сообщение от kirawa Посмотреть сообщение
BaseAdapter гугли
Цитата Сообщение от kirawa Посмотреть сообщение
охо-хо-хо
Не надо мусорить в теме
Цитата Сообщение от MegaSinner Посмотреть сообщение
А вам нужно всего лишь немного поправить tabitem.xml - убрать лишнее и добавить туда чекбокс, повесив на него листенер (и всё остальное с этим связанное - holder и т.д.)
Это я сделал, тут проблем нет, кроме holder, что это?
Цитата Сообщение от MegaSinner Посмотреть сообщение
Это надо делать с помощью ViewHolder, чтобы при касании пальцем чекало нужный чекбокс.
Это все работает, проблема в отображении чекбоксов, т.е. приложение при старте заполняет БД (как рис. в шапке), затем:
1. Чтение ДБ через Cursorloader (сделано)
2. Вывод данных Cursorloader в ListView (сделано)
3. Отображение чекбоксов некорректное. Получается как будто вместо галки прописывает текст справа. Типа Caption.
Москва [] 1
Казань [] 0
Делаю примерно так
Visual Basic
1
2
String[] from = new String[] { DB.NAME, DB.CHECK };
int[] to = new int[] { R.id.item_name, R.id.item_check }
Код могу только вечером приложить.
0
35 / 35 / 2
Регистрация: 12.11.2013
Сообщений: 345
10.04.2014, 13:36 13
0
10.04.2014, 13:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2014, 13:36
Помогаю со студенческими работами здесь

ListView и checkBox JavaFX
Имеется:

Двухколоночный listview с checkbox
Здравствуйте. Хочу сделать двух колоночный listview, причем в обоих колонках должны быть чек боксы....

ListView со столбцом CheckBox
Можно ли в ListView сделать один из столбцом (не первый) со свойствами CheckBox'а наподобие как...

Проверка checkbox в listview
Необходимо из списка listview выбрать те items на которых установлен checkbox, или же та же задача...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru