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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 92 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: 02 фев 2012, 03:00 
Администратор
Аватар пользователя

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

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

[url=http://www.startandroid.ru/ru/uroki/vse-uroki-spiskom/112-urok-53-simplecursortreeadapter-primer-ispolzovanija.html:av6drp4a]Click here to read this article![/url:av6drp4a]

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


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

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

Зарегистрирован: 21 фев 2012, 05:59
Сообщений: 8
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
чтото туплю я.
делаю контекстное меню для 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) //кликнули на чайлде

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


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

Зарегистрирован: 11 июл 2012, 12:30
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Объясните, пожалуйста, почему в методе 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));
}


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

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1333
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
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
ИзображениеИзображение


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

Зарегистрирован: 11 июл 2012, 12:30
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Теперь всё ясно! Спасибо большое!


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

Зарегистрирован: 14 авг 2012, 15:18
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Комрады, добрый день!

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


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

Зарегистрирован: 26 июн 2012, 13:22
Сообщений: 3422
Откуда: UA
Благодарил (а): 11 раз.
Поблагодарили: 244 раз.
чем e.printStackTrace() не устраивает? а если конкретно строчку и т.д. искать то гоу то дебаг и построчный пробег по кривому методу.

_________________
R.id.team
Политика на форуме запрещена


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

Зарегистрирован: 14 май 2012, 16:18
Сообщений: 372
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
LogCat показывает строку в которой возникло исключение и двойной клик по строке с исключением перекинет на строку в исходнике, если только сам исходник есть в проекте. Если исходника нет, то естественно строку не покажет, а только имя метода в котором произошло исключение.


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

Зарегистрирован: 14 авг 2012, 15:18
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Да, точняк, перекидывает в код!! В общем все довольно удобно, видимо обилие красного текста меня смутило и на мои попытки дабл кликов не там где надо реакции не было.


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

Зарегистрирован: 16 июл 2012, 07:47
Сообщений: 235
Благодарил (а): 0 раз.
Поблагодарили: 25 раз.
Для четвёртого Анодроида (Ice Cream) есть исходники - если подключить их к проекту, будет переходить и туда.


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

Зарегистрирован: 14 авг 2012, 15:18
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Отлично! Появился ещё один вопрос правда не по теме урока...

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

Спасибо!


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

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


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

Зарегистрирован: 14 авг 2012, 15:18
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
А, вот в чем дело! А как его запустить? Он у меня похоже автоматически отрабатывает..


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

Зарегистрирован: 16 июл 2012, 07:47
Сообщений: 235
Благодарил (а): 0 раз.
Поблагодарили: 25 раз.
Чаще всего он отрабаватывает автоматически - но иногда его надо специально запускать. на тулбаре есть соответствующая иконка.
Иногда он ошибочно отмечает исправленную ошибку. Если файл не сохранён, нужно его сохранить (Ctrl-S), можно удалить строку и вставить обратно. Но про Clear Lint Markers не знал.


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

Зарегистрирован: 14 авг 2012, 15:18
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Да, надо бы отдельно почитать про локализацию, спасибо!


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

Зарегистрирован: 14 май 2012, 16:18
Сообщений: 372
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Да там вообще непонятно какие ошибки он автоматом отрабатывает, по идее должен все показывать при сохранении файла , но этого не происходит. Я думал, что он автоматом вылавливает только критические ошибки, а предупреждения только по явному вызову, оказалось нет. К примеру, если определить свойство 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


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

Зарегистрирован: 14 авг 2012, 15:18
Сообщений: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Ценное замечание!


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

Зарегистрирован: 16 июл 2012, 07:47
Сообщений: 235
Благодарил (а): 0 раз.
Поблагодарили: 25 раз.
Я уже писал про трудности определения неиспользуемых ресурсов. Та же трудность с методом onClick(). Да, он должен указывать на существующий метод, но в какой Activity ? За испключением очень простых проектов, как правило в проекте несколько Activity и Lint должен определить, к какому из них подключается виджет.


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

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

Метод onClick должен быть реализован в Activity c контекстом которой связан данный виджет. А вот как Android Lint определяет к какому контексту привязан view не знаю, или он тупо перебирает все Activity в проекте, нужно поэкспериментировать.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 16 авг 2012, 17:41 

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

У меня вообще нет в проекте values-ru , а Lint выдает, что я должен перевести ресурсы на ru :) Ну как он определил, что я вообще русский? Может я китаец :lol: :?:
Неужто он проверяет локаль на компе?


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

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


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

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