Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 21 сен 2017, 02:51

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 371 ]  На страницу 1, 2, 3, 4, 5 ... 19  След.
Автор Сообщение
СообщениеДобавлено: 30 янв 2012, 07:16 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1345
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
В этом уроке:

- используем SimpleCursorAdapter для построения списка
- добавляем и удаляем записи в списке

[url=http://www.startandroid.ru/ru/uroki/vse-uroki-spiskom/111-urok-52-simplecursoradapter-primer-ispolzovanija.html:3itzgxeb]Click here to read this article![/url:3itzgxeb]

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 08 май 2017, 16:00, всего редактировалось 10 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 фев 2012, 19:47 

Зарегистрирован: 03 фев 2012, 19:11
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Модифицировал данный пример т.о., что при кликаньи на иконку, производятся некие действия с записью, соответствующей элементу списка, на котором эта запись находится.
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1. public void onButtonItemClick(View view) {
  2.             int id = cursor.getInt(cursor.getColumnIndex(DB.COLUMN_ID));
  3.             //
  4.             //  modify record
  5.             //  
  6.             refreshCursor();
  7.             scAdapter.changeCursor(cursor);
  8.         }

Проблема в том, что в данном обработчике, курсор указывает на запись, не соответствующую элементу списка, на котором кликнули. Получается, что на самом деле курсор ссылается на запись, находящуюся в начале или конце экрана. (Если вместо имиджа поставить кнопку эффект будет тот же) Если клацнуть сначала на саму запись (не на имидж),а потом на имидж, этого же элемента списка, то все в порядке, курсор соответствует элементу списка. Можно ли в данной ситуации, как-то добиться синхронизации между курсором и списком, при клике на кнопке и обойтись без двойного нажатия ?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 07 фев 2012, 12:53 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1345
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
А как вы повесили обработчик на картинку?

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 07 фев 2012, 13:51 

Зарегистрирован: 03 фев 2012, 19:11
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
В xml, в секции <ImageView>, по аналогии с кнопкой "добавить запись"

Код: [ Загрузить ] [ Скрыть ]
Using XML Syntax Highlighting
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3.          xmlns:android="http://schemas.android.com/apk/res/android"
  4.          android:layout_width="match_parent"
  5.          android:layout_height="wrap_content"
  6.          android:orientation="horizontal">
  7.         <ImageView
  8.                 android:id="@+id/ivImg"
  9.                 android:layout_width="wrap_content"
  10.                 android:layout_height="wrap_content"
  11.                 android:onClick="onButtonItemClick"
  12.                 android:src="@drawable/folder">
  13.         </ImageView>
  14.         <TextView
  15.                 android:id="@+id/tvName"
  16.                 android:layout_width="wrap_content"
  17.                 android:layout_height="wrap_content"
  18.                 android:layout_gravity="center_vertical"
  19.                 android:layout_marginLeft="10dp"
  20.                 android:text=""
  21.                 android:onClick="onGroupClick"
  22.                 android:textSize="14sp">
  23.         </TextView>
  24. </LinearLayout>


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 фев 2012, 12:15 

Зарегистрирован: 03 фев 2012, 19:11
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Уже разобрался, синхронизации между списком и курсором удалось достичь, добавив в обработчик нажатия код:
Код: [ Загрузить ] [ Скрыть ]
Using Java Syntax Highlighting
  1.   public void onButtonItemClick(View v) {
  2.           int pos = lvData.getPositionForView(v);
  3.           cursor.moveToPosition(pos);
  4.           .................................
  5.   }
  6.  


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 фев 2012, 13:30 

Зарегистрирован: 03 фев 2012, 19:11
Сообщений: 10
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Вопрос по оптимальности
Допустим, что основная часть приложения получает по некому условию выборку из базы данных (до 600 записей) и выводит интерфейс для корректировки этих данных в виде таблицы.
С точки зрения простоты кода, вроде как, проще использовать SimpleCursorAdapter и держать постоянно активным курсор и соединение с SQlite, т.к. все время читаем и пишем.
Насколько такой подход оптимален с точки зрения использования ресурсов ?
Другой вариант, прочитать нужное из базы загрузить в массив, закрыть курсор и работать, через например CustomAdapter, обновляя массив и прописывая изменения в базу по мере обновления, кажется более громоздким. Стоит ли это все городить, только из за отсутствия постоянно открытого курсора ?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 фев 2012, 22:09 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1345
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
Хороший вопрос ...
Мне хочется верить, что Cursor заточен под такие задачи и ест не сильно больше памяти, чем массив или коллекция тех же данных.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2012, 15:18 

Зарегистрирован: 21 фев 2012, 05:59
Сообщений: 8
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
не знаю в какой теме задать вопрос, задам здесь.

Хочу вернуть из 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, даже если он мне не нужен???


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 14 мар 2012, 15:23 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
яфпкк писал(а):
...если я собираюсь передавать курсор в SimpleCursorAdapter, то в нем ВСЕГДА должен быть столбец _id, даже если он мне не нужен???
Да. Наличие столбца "_id", в данном случае, обязательно.

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 мар 2012, 09:27 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1345
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
яфпкк писал(а):
то в нем ВСЕГДА должен быть столбец _id, даже если он мне не нужен???


Да, причину я описал в уроке 38:

Цитата:
В различных источниках при работе с БД в качестве наименования поля-идентификатора в таблице используют не просто id, а _id. Почему?

Ответ нашелся в доках по Cursor-адаптерам. Цитата: "The Cursor must include a column named "_id" or this class will not work.". Т.е. если вы планируете использовать Cursor-адаптеры, то необходимо, чтобы таблица содержала поле _id, иначе адаптер не будет работать.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 апр 2012, 14:08 

Зарегистрирован: 26 мар 2012, 12:51
Сообщений: 12
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
такой вопрос- вы в своих уроках используете некоторые методы которые в Android считаются deprecated типа startManagingCursor() stopManagingCursor() и другие... Критично ли это для меня как новичка? И как заменить их на предпочтительные методы? Спасибо.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 апр 2012, 20:46 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
irukanji писал(а):
Критично ли это для меня как новичка? И как заменить их на предпочтительные методы? Спасибо.
Лично я, для себя, отметил одно, если Эклипс не просит пометить метод как "deprecated", значит можно его использовать. Большинство предложений Гугла по замене "deprecated" методов применимо только к более высокой версии SDK. Следовательно, что является "deprecated" для Android 4.0, для Android 2.1 таковым может не являться. Все зависит от того на какую платформу Вы пишите приложение.
Конечно, чем выше версия Android тем больше возможностей появляется, но не стоит забывать, что при этом меньше людей смогут установить ваше приложение.

PS: Я тут про это уже спрашивал, но мне никто толком не ответил. Пришлось делать выводы самому. Надеюсь я не слишком заблуждаюсь.

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 апр 2012, 09:56 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1345
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
KamiSempai писал(а):
Надеюсь я не слишком заблуждаюсь.

Я примерно также вижу ситуацию. Если хотите использовать то, что Android предлагает вместо deprecated методов, то можно подключить support packages и юзать новые возможности. Для этого надо залить их через SDK-manager и добавить в проект. Тут мануалка: http://developer.android.com/sdk/compat ... brary.html

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 апр 2012, 12:08 
Аватар пользователя

Зарегистрирован: 17 фев 2012, 21:23
Сообщений: 1339
Откуда: Мордор
Благодарил (а): 16 раз.
Поблагодарили: 161 раз.
damager82 писал(а):
Спасибо, нужно будет почитать, как нибудь.

_________________
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 31 май 2012, 15:55 

Зарегистрирован: 30 май 2012, 15:51
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
как вытащить нужную строку из базы зная номер id ?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 31 май 2012, 17:21 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1345
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
Grigory писал(а):
как вытащить нужную строку из базы зная номер id ?

Метод query, урок 36.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 05 июн 2012, 07:09 

Зарегистрирован: 05 июн 2012, 07:05
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Спасибо за познавательный урок!
Не подскажете, каким образом можно менять цвет или размер текста в зависимости от значений из БД?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 05 июн 2012, 13:59 
Аватар пользователя

Зарегистрирован: 01 июн 2012, 14:25
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Здравствуйте, у меня выдает ошибку на создание адаптера, не подскажите что это может быть


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 июн 2012, 09:25 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1345
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
inomqvo9 писал(а):
Спасибо за познавательный урок!
Не подскажете, каким образом можно менять цвет или размер текста в зависимости от значений из БД?

Есть пара способов. В уроках 49 и 50 я об этом рассказывал.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 июн 2012, 09:26 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1345
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
gaydamaka писал(а):
Здравствуйте, у меня выдает ошибку на создание адаптера, не подскажите что это может быть

А что конкретно пишет?

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 371 ]  На страницу 1, 2, 3, 4, 5 ... 19  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB