Страница 1 из 5

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

Добавлено: 02 фев 2012, 03:00
damager82
В этом уроке:

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

[url=http://www.startandroid.ru/ru/uroki/vse ... l:av6drp4a]Click here to read this article![/url:av6drp4a]

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) //кликнули на чайлде

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

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

Добавлено: 12 июл 2012, 14:52
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));
}

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

Добавлено: 12 июл 2012, 16:43
damager82
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.

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

Добавлено: 12 июл 2012, 22:10
Jane
Теперь всё ясно! Спасибо большое!

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

Добавлено: 14 авг 2012, 15:23
Spoofy
Комрады, добрый день!

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

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

Добавлено: 14 авг 2012, 15:40
rezak90
чем e.printStackTrace() не устраивает? а если конкретно строчку и т.д. искать то гоу то дебаг и построчный пробег по кривому методу.

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

Добавлено: 14 авг 2012, 15:41
AndreyI
LogCat показывает строку в которой возникло исключение и двойной клик по строке с исключением перекинет на строку в исходнике, если только сам исходник есть в проекте. Если исходника нет, то естественно строку не покажет, а только имя метода в котором произошло исключение.

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

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

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

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

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

Добавлено: 16 авг 2012, 14:30
Spoofy
Отлично! Появился ещё один вопрос правда не по теме урока...

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

Спасибо!

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

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

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

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

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

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

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

Добавлено: 16 авг 2012, 15:15
Spoofy
Да, надо бы отдельно почитать про локализацию, спасибо!

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

Добавлено: 16 авг 2012, 15:23
AndreyI
Да там вообще непонятно какие ошибки он автоматом отрабатывает, по идее должен все показывать при сохранении файла , но этого не происходит. Я думал, что он автоматом вылавливает только критические ошибки, а предупреждения только по явному вызову, оказалось нет. К примеру, если определить свойство 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

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

Добавлено: 16 авг 2012, 15:53
Spoofy
Ценное замечание!

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

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

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

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

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

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

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