Урок 53. SimpleCursorTreeAdapter, пример использования

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение damager82 » 02 фев 2012, 03:00

В этом уроке:

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

[url=http://www.startandroid.ru/ru/uroki/vse ... l:av6drp4a]Click here to read this article![/url:av6drp4a]
Последний раз редактировалось damager82 08 май 2017, 16:00, всего редактировалось 5 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

яфпкк
Сообщения: 8
Зарегистрирован: 21 фев 2012, 05:59

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение яфпкк » 25 мар 2012, 18:09

чтото туплю я.
делаю контекстное меню для ExpandedListView
как узнать, меню было вызвано при клике на группу или на чайлд?
-------------------------
отвечаю сам.
ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo)item.getMenuInfo();
long packedPosition = ExpandableListView.getPackedPositionType(info.packedPosition);
if (packedPosition == ExpandableListView.PACKED_POSITION_TYPE_GROUP) //кликнули на группе
...
else if (packedPosition == ExpandableListView.PACKED_POSITION_TYPE_CHILD) //кликнули на чайлде

вобщем то все тривиально оказалось

Jane
Сообщения: 6
Зарегистрирован: 11 июл 2012, 12:30

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Jane » 12 июл 2012, 14:52

Объясните, пожалуйста, почему в методе getPhoneData мы прописываем groupCursor.getInt(idColumn), а не idColumn ? Не очень понимаю, для чего нужен метод getInt..
protected Cursor getChildrenCursor(Cursor groupCursor) {
// получаем курсор по элементам для конкретной группы
int idColumn = groupCursor.getColumnIndex(DB.COMPANY_COLUMN_ID);
return db.getPhoneData(groupCursor.getInt(idColumn));
}

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение damager82 » 12 июл 2012, 16:43

Jane писал(а):Объясните, пожалуйста, почему в методе getPhoneData мы прописываем groupCursor.getInt(idColumn), а не idColumn ? Не очень понимаю, для чего нужен метод getInt..
protected Cursor getChildrenCursor(Cursor groupCursor) {
// получаем курсор по элементам для конкретной группы
int idColumn = groupCursor.getColumnIndex(DB.COMPANY_COLUMN_ID);
return db.getPhoneData(groupCursor.getInt(idColumn));
}
Это особенности работы курсора. Он может выдать нам данные только, если мы укажем ему номер столбца. А этот номер мы можем получить по имени столбца. idColumn - это номер столбца курсора.

Здесь мы получаем на вход groupCursor, который содержит данные о группах. Наша задача - вернуть курсор с данными по элементам группы. Чтобы эти данные по элементам получить, нам нужно знать ID группы. Мы знаем имя столбца (DB.COMPANY_COLUMN_ID), в котором лежит ID. По этому имени получаем номер столбца с помощью метода getColumnIndex. И теперь этот номер столбца (idColumn) используем чтобы достать ID. Ну и далее полученный ID передаем в getPhoneData.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Jane
Сообщения: 6
Зарегистрирован: 11 июл 2012, 12:30

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Jane » 12 июл 2012, 22:10

Теперь всё ясно! Спасибо большое!

Spoofy
Сообщения: 6
Зарегистрирован: 14 авг 2012, 15:18

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Spoofy » 14 авг 2012, 15:23

Комрады, добрый день!

Оч хочется узнать как вы находите неявные ошибки в коде?
Я например анализирую LogCat и по смыслу (например NullPointer) понимаю, что где то объекта почему то не создано и начинаю дебажить с целью выявить где валится... Но вот почему нельзя посмотреть в какой строке или хотя бы в каком методе и какого класса это происходит!! Наверняка я чего то не знаю.. подскажите какие есть фичи на эту тему? Спасибо!
--------------------------------
Внимательно посмотрел - в логах метод и класс таки увидел, отлично! Но вот как бы теперь узнать конкретную строчку или кусок кода, который вызвал дамп?
---------------------------------
Офигеть! В разделе Caused by в логах и строка указана!!! Общение с самим собой оказалось очень плодотворным, всем спасибо )))))

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение rezak90 » 14 авг 2012, 15:40

чем e.printStackTrace() не устраивает? а если конкретно строчку и т.д. искать то гоу то дебаг и построчный пробег по кривому методу.
R.id.team
Политика на форуме запрещена

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение AndreyI » 14 авг 2012, 15:41

LogCat показывает строку в которой возникло исключение и двойной клик по строке с исключением перекинет на строку в исходнике, если только сам исходник есть в проекте. Если исходника нет, то естественно строку не покажет, а только имя метода в котором произошло исключение.

Spoofy
Сообщения: 6
Зарегистрирован: 14 авг 2012, 15:18

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Spoofy » 14 авг 2012, 15:44

Да, точняк, перекидывает в код!! В общем все довольно удобно, видимо обилие красного текста меня смутило и на мои попытки дабл кликов не там где надо реакции не было.

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение math64 » 14 авг 2012, 18:07

Для четвёртого Анодроида (Ice Cream) есть исходники - если подключить их к проекту, будет переходить и туда.

Spoofy
Сообщения: 6
Зарегистрирован: 14 авг 2012, 15:18

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Spoofy » 16 авг 2012, 14:30

Отлично! Появился ещё один вопрос правда не по теме урока...

Что такое Lint markers? Например я исправляю ошибку, но код все равно подсвечивается красным..
Давлю на иконку ошибки, выбираю из выпадающего списка Clear Lint Markers и радуюсь жизни..

Спасибо!

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение math64 » 16 авг 2012, 14:46

Ну есть у меня файлы values/strings.xml и values-ru/strings.xml. Запускаю Lint и он находит, что для некоторых слов нет русских переводов, а некоторые вообще не используется. И предлагает исправить: добавить перевод, удалить неиспользуемые. Это не есть ошибки - программа будет работать и без переводов - например, я не хочу переводить название приложения, а "неиспользуемые" я всё же использую (получая идентификатор через getResources().getIdentifier(name, "string", getPackageName()); - но чаще всего нужно всё же добавить перевод или удалить ненужный ресурс.

Spoofy
Сообщения: 6
Зарегистрирован: 14 авг 2012, 15:18

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Spoofy » 16 авг 2012, 14:50

А, вот в чем дело! А как его запустить? Он у меня похоже автоматически отрабатывает..

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение math64 » 16 авг 2012, 14:55

Чаще всего он отрабаватывает автоматически - но иногда его надо специально запускать. на тулбаре есть соответствующая иконка.
Иногда он ошибочно отмечает исправленную ошибку. Если файл не сохранён, нужно его сохранить (Ctrl-S), можно удалить строку и вставить обратно. Но про Clear Lint Markers не знал.

Spoofy
Сообщения: 6
Зарегистрирован: 14 авг 2012, 15:18

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Spoofy » 16 авг 2012, 15:15

Да, надо бы отдельно почитать про локализацию, спасибо!

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение AndreyI » 16 авг 2012, 15:23

Да там вообще непонятно какие ошибки он автоматом отрабатывает, по идее должен все показывать при сохранении файла , но этого не происходит. Я думал, что он автоматом вылавливает только критические ошибки, а предупреждения только по явному вызову, оказалось нет. К примеру, если определить свойство onClick в xml, но не определить соответствующий метод в Activity ошибки автоматом не показывает, но при явном вызове Android-Lint она появляется. Не сказал бы, что это не критическая ошибка из-за неё приложение падает.
В настройках она отмечена как критическая (fatal):
Ensures that onClick attribute values refer to real methods

The onClick attribute value should be the name of a method in this View's context to invoke when the view is clicked. This name must correspond to a public method that takes exactly one parameter of type View.

Видимо для ускорения работы при сохранении файла запускается какая-то облегченная версия чекера, а полную нужно запускать явно либо она запустится при экспорте (если отмечен соответствующий чек. бокс в настройках). Непонятно только логика отбора ошибок для облегченной/полной версии чекера.

Так что Android Lint лучше запускать принудительно, на тулбаре есть иконка с галочкой (либо из контекстного меню Android Tools) , то что он проверяет можно посмотреть в настройках Preferences-Android-Lint Error Checking

Spoofy
Сообщения: 6
Зарегистрирован: 14 авг 2012, 15:18

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение Spoofy » 16 авг 2012, 15:53

Ценное замечание!

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение math64 » 16 авг 2012, 15:58

Я уже писал про трудности определения неиспользуемых ресурсов. Та же трудность с методом onClick(). Да, он должен указывать на существующий метод, но в какой Activity ? За испключением очень простых проектов, как правило в проекте несколько Activity и Lint должен определить, к какому из них подключается виджет.

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение AndreyI » 16 авг 2012, 17:05

math64 писал(а):Я уже писал про трудности определения неиспользуемых ресурсов. Та же трудность с методом onClick(). Да, он должен указывать на существующий метод, но в какой Activity ? За испключением очень простых проектов, как правило в проекте несколько Activity и Lint должен определить, к какому из них подключается виджет.
Метод onClick должен быть реализован в Activity c контекстом которой связан данный виджет. А вот как Android Lint определяет к какому контексту привязан view не знаю, или он тупо перебирает все Activity в проекте, нужно поэкспериментировать.

ЗЫ Не определяет, достаточно чтобы в любом месте проекта был метод с именем как в onClick и параметром View, даже не важно в каком классе (не обязательно наследника Activity) и Lint не срабатывает :) . Интелекта в Android Lint пока маловато. Но все равно полезная штука.

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 53. SimpleCursorTreeAdapter, пример использования

Сообщение AndreyI » 16 авг 2012, 17:41

math64 писал(а):Ну есть у меня файлы values/strings.xml и values-ru/strings.xml. Запускаю Lint и он находит, что для некоторых слов нет русских переводов, а некоторые вообще не используется. И предлагает исправить: добавить перевод, удалить неиспользуемые. Это не есть ошибки - программа будет работать и без переводов - например, я не хочу переводить название приложения, а "неиспользуемые" я всё же использую (получая идентификатор через getResources().getIdentifier(name, "string", getPackageName()); - но чаще всего нужно всё же добавить перевод или удалить ненужный ресурс.
У меня вообще нет в проекте values-ru , а Lint выдает, что я должен перевести ресурсы на ru :) Ну как он определил, что я вообще русский? Может я китаец :lol: :?:
Неужто он проверяет локаль на компе?

Ответить