Урок 52. SimpleCursorAdapter, пример использования
Урок 52. SimpleCursorAdapter, пример использования
В этом уроке:
- используем SimpleCursorAdapter для построения списка
- добавляем и удаляем записи в списке
[url=http://www.startandroid.ru/ru/uroki/vse ... l:3itzgxeb]Click here to read this article![/url:3itzgxeb]
- используем SimpleCursorAdapter для построения списка
- добавляем и удаляем записи в списке
[url=http://www.startandroid.ru/ru/uroki/vse ... l:3itzgxeb]Click here to read this article![/url:3itzgxeb]
Последний раз редактировалось damager82 08 май 2017, 16:00, всего редактировалось 10 раз.
Re: Урок 52. SimpleCursorAdapter, пример использования
Модифицировал данный пример т.о., что при кликаньи на иконку, производятся некие действия с записью, соответствующей элементу списка, на котором эта запись находится.
Проблема в том, что в данном обработчике, курсор указывает на запись, не соответствующую элементу списка, на котором кликнули. Получается, что на самом деле курсор ссылается на запись, находящуюся в начале или конце экрана. (Если вместо имиджа поставить кнопку эффект будет тот же) Если клацнуть сначала на саму запись (не на имидж),а потом на имидж, этого же элемента списка, то все в порядке, курсор соответствует элементу списка. Можно ли в данной ситуации, как-то добиться синхронизации между курсором и списком, при клике на кнопке и обойтись без двойного нажатия ?
Код: Выделить всё
public void onButtonItemClick(View view) {
int id = cursor.getInt(cursor.getColumnIndex(DB.COLUMN_ID));
//
// modify record
//
refreshCursor();
scAdapter.changeCursor(cursor);
}
Re: Урок 52. SimpleCursorAdapter, пример использования
А как вы повесили обработчик на картинку?
Re: Урок 52. SimpleCursorAdapter, пример использования
В xml, в секции <ImageView>, по аналогии с кнопкой "добавить запись"
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ivImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onButtonItemClick"
android:src="@drawable/folder">
</ImageView>
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:text=""
android:onClick="onGroupClick"
android:textSize="14sp">
</TextView>
</LinearLayout>
Re: Урок 52. SimpleCursorAdapter, пример использования
Уже разобрался, синхронизации между списком и курсором удалось достичь, добавив в обработчик нажатия код:
Код: Выделить всё
public void onButtonItemClick(View v) {
int pos = lvData.getPositionForView(v);
cursor.moveToPosition(pos);
.................................
}
Re: Урок 52. SimpleCursorAdapter, пример использования
Вопрос по оптимальности
Допустим, что основная часть приложения получает по некому условию выборку из базы данных (до 600 записей) и выводит интерфейс для корректировки этих данных в виде таблицы.
С точки зрения простоты кода, вроде как, проще использовать SimpleCursorAdapter и держать постоянно активным курсор и соединение с SQlite, т.к. все время читаем и пишем.
Насколько такой подход оптимален с точки зрения использования ресурсов ?
Другой вариант, прочитать нужное из базы загрузить в массив, закрыть курсор и работать, через например CustomAdapter, обновляя массив и прописывая изменения в базу по мере обновления, кажется более громоздким. Стоит ли это все городить, только из за отсутствия постоянно открытого курсора ?
Допустим, что основная часть приложения получает по некому условию выборку из базы данных (до 600 записей) и выводит интерфейс для корректировки этих данных в виде таблицы.
С точки зрения простоты кода, вроде как, проще использовать SimpleCursorAdapter и держать постоянно активным курсор и соединение с SQlite, т.к. все время читаем и пишем.
Насколько такой подход оптимален с точки зрения использования ресурсов ?
Другой вариант, прочитать нужное из базы загрузить в массив, закрыть курсор и работать, через например CustomAdapter, обновляя массив и прописывая изменения в базу по мере обновления, кажется более громоздким. Стоит ли это все городить, только из за отсутствия постоянно открытого курсора ?
Re: Урок 52. SimpleCursorAdapter, пример использования
Хороший вопрос ...
Мне хочется верить, что Cursor заточен под такие задачи и ест не сильно больше памяти, чем массив или коллекция тех же данных.
Мне хочется верить, что Cursor заточен под такие задачи и ест не сильно больше памяти, чем массив или коллекция тех же данных.
Re: Урок 52. SimpleCursorAdapter, пример использования
не знаю в какой теме задать вопрос, задам здесь.
Хочу вернуть из query определенный набор полей
Cursor cur = db.query("table1",new String[]{"name1,name2"},null.nulll,...);
При попытке передать этот курсор в SimpleCursorAdapter получаю ошибку "IllegalArgumentException: column '_id' does not exist"
в мане про CursorAdapter прочитал
Adapter that exposes data from a Cursor to a ListView widget. The Cursor must include a column named "_id" or this class will not work.
т.е. я прально понимаю, если я собираюсь передавать курсор в SimpleCursorAdapter, то в нем ВСЕГДА должен быть столбец _id, даже если он мне не нужен???
Хочу вернуть из query определенный набор полей
Cursor cur = db.query("table1",new String[]{"name1,name2"},null.nulll,...);
При попытке передать этот курсор в SimpleCursorAdapter получаю ошибку "IllegalArgumentException: column '_id' does not exist"
в мане про CursorAdapter прочитал
Adapter that exposes data from a Cursor to a ListView widget. The Cursor must include a column named "_id" or this class will not work.
т.е. я прально понимаю, если я собираюсь передавать курсор в SimpleCursorAdapter, то в нем ВСЕГДА должен быть столбец _id, даже если он мне не нужен???
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 52. SimpleCursorAdapter, пример использования
Да. Наличие столбца "_id", в данном случае, обязательно.яфпкк писал(а):...если я собираюсь передавать курсор в SimpleCursorAdapter, то в нем ВСЕГДА должен быть столбец _id, даже если он мне не нужен???
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 52. SimpleCursorAdapter, пример использования
Да, причину я описал в уроке 38:яфпкк писал(а):то в нем ВСЕГДА должен быть столбец _id, даже если он мне не нужен???
В различных источниках при работе с БД в качестве наименования поля-идентификатора в таблице используют не просто id, а _id. Почему?
Ответ нашелся в доках по Cursor-адаптерам. Цитата: "The Cursor must include a column named "_id" or this class will not work.". Т.е. если вы планируете использовать Cursor-адаптеры, то необходимо, чтобы таблица содержала поле _id, иначе адаптер не будет работать.
Re: Урок 52. SimpleCursorAdapter, пример использования
такой вопрос- вы в своих уроках используете некоторые методы которые в Android считаются deprecated типа startManagingCursor() stopManagingCursor() и другие... Критично ли это для меня как новичка? И как заменить их на предпочтительные методы? Спасибо.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 52. SimpleCursorAdapter, пример использования
Лично я, для себя, отметил одно, если Эклипс не просит пометить метод как "deprecated", значит можно его использовать. Большинство предложений Гугла по замене "deprecated" методов применимо только к более высокой версии SDK. Следовательно, что является "deprecated" для Android 4.0, для Android 2.1 таковым может не являться. Все зависит от того на какую платформу Вы пишите приложение.irukanji писал(а):Критично ли это для меня как новичка? И как заменить их на предпочтительные методы? Спасибо.
Конечно, чем выше версия Android тем больше возможностей появляется, но не стоит забывать, что при этом меньше людей смогут установить ваше приложение.
PS: Я тут про это уже спрашивал, но мне никто толком не ответил. Пришлось делать выводы самому. Надеюсь я не слишком заблуждаюсь.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 52. SimpleCursorAdapter, пример использования
Я примерно также вижу ситуацию. Если хотите использовать то, что Android предлагает вместо deprecated методов, то можно подключить support packages и юзать новые возможности. Для этого надо залить их через SDK-manager и добавить в проект. Тут мануалка: http://developer.android.com/sdk/compat ... brary.htmlKamiSempai писал(а):Надеюсь я не слишком заблуждаюсь.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 52. SimpleCursorAdapter, пример использования
Спасибо, нужно будет почитать, как нибудь.damager82 писал(а):Тут мануалка: http://developer.android.com/sdk/compat ... brary.html
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 52. SimpleCursorAdapter, пример использования
как вытащить нужную строку из базы зная номер id ?
Re: Урок 52. SimpleCursorAdapter, пример использования
Метод query, урок 36.Grigory писал(а):как вытащить нужную строку из базы зная номер id ?
Re: Урок 52. SimpleCursorAdapter, пример использования
Спасибо за познавательный урок!
Не подскажете, каким образом можно менять цвет или размер текста в зависимости от значений из БД?
Не подскажете, каким образом можно менять цвет или размер текста в зависимости от значений из БД?
Re: Урок 52. SimpleCursorAdapter, пример использования
Здравствуйте, у меня выдает ошибку на создание адаптера, не подскажите что это может быть
Re: Урок 52. SimpleCursorAdapter, пример использования
Есть пара способов. В уроках 49 и 50 я об этом рассказывал.inomqvo9 писал(а):Спасибо за познавательный урок!
Не подскажете, каким образом можно менять цвет или размер текста в зависимости от значений из БД?
Re: Урок 52. SimpleCursorAdapter, пример использования
А что конкретно пишет?gaydamaka писал(а):Здравствуйте, у меня выдает ошибку на создание адаптера, не подскажите что это может быть