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

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

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

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

08.04.2014, 20:16. Просмотров 1480. Ответов 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?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2014, 20:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание ListView с CheckBox из БД (Программирование Android):

Обработка нажатия CheckBox в ListView - Программирование Android
Привет, Есть ListView на основе BaseAdapter. Каждый элемент содержит TextView и несколько чекбоксов. Как обработать нажатие на конкретный...

Сохранение состояния Checkbox в Listview - Программирование Android
Возникла проблема с сохранением состояния checkbox'ов в Listview. Listview состоит из текста, напротив которого стоит чекбокс. Требуется...

Создание ListView из EditText - Программирование Android
Выдает ошибку в строке при создании адаптера. Пишет, что не распознает конструкцию ArrayAdapter Ниже прилагаю код. Список должен...

Создание стиля карточки в ListView - Программирование Android
Доброго времени суток. Делаю интерфейс приложения и возникает проблема в стиле отображения. card_background.xml &lt;?xml version=&quot;1.0&quot;...

Создание View элементов из кода и размещение их в listview - Программирование Android
Здравствуйте, задача такая: 1) Есть массив строк. Программа читает поочереди элементы массива и проверяет его значение: Если...

ListView. После добавления кнопки перестал быть доступен сам ListView - Программирование Android
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам список стал недоступен для клика, а...

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

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

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

Это надо делать с помощью ViewHolder, чтобы при касании пальцем чекало нужный чекбокс.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
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
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
10.04.2014, 13:36 #13
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2014, 13:36
Привет! Вот еще темы с ответами:

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

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.04.2014, 13:36
Ответ Создать тему
Опции темы

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