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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
#1

Создание ListView с CheckBox из БД - Программирование Android

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

Привет, приложение создает БД с полями 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?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
08.04.2014, 23:47     Создание ListView с CheckBox из БД #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));
            //добавляем в адаптер
        }
...или я вопроса не понял
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
09.04.2014, 10:03  [ТС]     Создание ListView с CheckBox из БД #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);
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
09.04.2014, 13:24     Создание ListView с CheckBox из БД #4
BaseAdapter гугли
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
09.04.2014, 15:19  [ТС]     Создание ListView с CheckBox из БД #5
Цитата Сообщение от kirawa Посмотреть сообщение
BaseAdapter гугли
В смысле? Это же базовый класс. И как он связан с БД?
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
09.04.2014, 15:54     Создание ListView с CheckBox из БД #6
Адаптер - это прокладка между данными и представлением списка. Есть готовые адаптеры, но мне они часто не подходят и я предпочитаю кастомный. Смысл в: 1) получил данные в том виде котором надо или удобно. Я предпочитаю создавать класс с гетерами и сетерами и хранить данные в коллекции 2) Вывел на экран списком с помощью адаптера
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
09.04.2014, 19:13  [ТС]     Создание ListView с CheckBox из БД #7
kirawa, ну что это прокладка это понятно, я же просто хочу использовать источник и приемник, для этого и существует подкласс CursorAdapter, а от посредника в виде коллекции или массива отказаться. как то так.
MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
09.04.2014, 20:45     Создание ListView с CheckBox из БД #8
Rube, вот
Цитата Сообщение от dubok79 Посмотреть сообщение
А там пихайте туда хоть черта лысого
- и это действительно так.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
10.04.2014, 08:35  [ТС]     Создание ListView с CheckBox из БД #9
Цитата Сообщение от MegaSinner Посмотреть сообщение
и это действительно так.
Кто ж спорит, что это не так, но в примере не то, что нужно.
Опишу как я понимаю:
Вместо Данные(БД) -> Коллекция -> CastomAdapter-> ListView
надо Данные(БД) -> SimpleCursorAdapter -> ListView

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

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

Это надо делать с помощью ViewHolder, чтобы при касании пальцем чекало нужный чекбокс.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
10.04.2014, 13:28  [ТС]     Создание ListView с CheckBox из БД #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 }
Код могу только вечером приложить.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2014, 13:36     Создание ListView с CheckBox из БД
Еще ссылки по теме:
ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? Android
Копирование данных из 1 listView во 2 listView Android
Android Использование ListView в ListView
Переход из Listview в Listview Android
Android Создать базу данных с(Создание функции БД, Создание процедуры БД, Создание тригера БД)

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

Или воспользуйтесь поиском по форуму:
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
10.04.2014, 13:36     Создание ListView с CheckBox из БД #13
Yandex
Объявления
10.04.2014, 13:36     Создание ListView с CheckBox из БД
Ответ Создать тему
Опции темы

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