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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 76 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Урок 50. SimpleAdapter. Используем ViewBinder
СообщениеДобавлено: 23 янв 2012, 08:15 
Администратор
Аватар пользователя

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

- используем свой SimpleAdapter.ViewBinder

Click here to read this article!

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


Последний раз редактировалось damager82 04 авг 2016, 18:57, всего редактировалось 5 раз(а).

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

Зарегистрирован: 02 мар 2012, 19:33
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Подскажите, пожалуйста, правильно ли я понимаю, что сделанное, в предыдущем уроке при помощи класса MySimpleAdapter можно реализовать и используя свой обработчик адаптера? И наоборот? Если да - то существуют ли какие-то рекомендации к использованию? Или это абсолютно ситуативный выбор?


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

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1317
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Да, можно и свой кастомный использовать. Задачи урока не всегда решены самым простым способом, но всегда раскрывают тему урока )

Выбор только по функционалу. Если вам хватает возможностей стандартных адаптеров, то все ок, иначе пишете свой.

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


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

Зарегистрирован: 17 апр 2012, 12:24
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Доброго времени суток всем!
У меня код урока 50 заработал только после
коррекции кода:

public class MyViewBinder implements ViewBinder {



public boolean setViewValue(View view, Object data, String textRepresentation) {
// TODO Auto-generated method stub


int red = view.getResources().getColor(R.color.Red);
int orange = view.getResources().getColor(R.color.Orange);
int green = view.getResources().getColor(R.color.Green);

int i = 0;

switch (view.getId()) {
// LinearLayout
case R.id.llLoad:
i = ((Integer) data).intValue();
if (i < 40) view.setBackgroundColor(green);
else
if (i < 70) view.setBackgroundColor(orange);
else
view.setBackgroundColor(red);
return true;
// ProgressBar
case R.id.pbLoad:
i = ((Integer) data).intValue();
((ProgressBar)view).setProgress(i);
return true;
}



return false;
}

}

С уважением
Гена

P.S. Если программер в 8 утра уже на работе, значит он еще на работе.


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

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1317
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
beginner писал(а):
У меня код урока 50 заработал только после
коррекции кода:

А в чем конкретно коррекция?

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


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

Зарегистрирован: 17 апр 2012, 12:24
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Записан код:
int red = view.getResources().getColor(R.color.Red);
int orange = view.getResources().getColor(R.color.Orange);
int green = view.getResources().getColor(R.color.Green);

в функцию
setViewValue(View view, Object data, String textRepresentation

вместо кода
int red = getResources().getColor(R.color.Red);
int orange = getResources().getColor(R.color.Orange);
int green = getResources().getColor(R.color.Green);

в классе MyViewBinder

т.е. функция getResources() скорректирована в метод класса View


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

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1317
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
beginner писал(а):
т.е. функция getResources() скорректирована в метод класса View


Интересно.
А до этой коррекции не компилировалось и выдавало ошибку?
Или просто не возвращало значение цвета?
Что именно не работало?

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


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

Зарегистрирован: 17 апр 2012, 12:24
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
до этой коррекции не компилировалось и выдавало ошибку:

x The method getResources() is undefined for the type MyViewBinder

MyViewBinder.java /mySimpleAdapter/src/your/mySimpleAdapter line 10 Java Problem

код откомпилировался только после коррекции


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

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1317
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
beginner писал(а):
до этой коррекции не компилировалось и выдавало ошибку:

x The method getResources() is undefined for the type MyViewBinder

MyViewBinder.java /mySimpleAdapter/src/your/mySimpleAdapter line 10 Java Problem

код откомпилировался только после коррекции


Похоже, что MyViewBinder у вас не является вложенным в MainActivity классом, а просто находится в MainActivity.java по соседству с основным классом.

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


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

Зарегистрирован: 17 апр 2012, 12:24
Сообщений: 4
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
damager82 писал:

Похоже, что MyViewBinder у вас не является вложенным в MainActivity классом, а просто находится в MainActivity.java по соседству с основным классом.

верно!!!

Прошу прощения за мою невнимательность!


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

Зарегистрирован: 24 ноя 2012, 14:41
Сообщений: 12
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Я так и не понял как в LinearLayout вставили данные. У меня ошибка постоянно вылетает.


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

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1317
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
dubok79 писал(а):
Я так и не понял как в LinearLayout вставили данные. У меня ошибка постоянно вылетает.

Показывайте код, если не 100% с урока скопировали

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


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

Зарегистрирован: 24 ноя 2012, 14:41
Сообщений: 12
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Да, урок полностью скопировал. запускал правда на дроиде 4.0.3


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

Зарегистрирован: 07 янв 2012, 12:32
Сообщений: 1317
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
dubok79 писал(а):
Да, урок полностью скопировал. запускал правда на дроиде 4.0.3

На 4.0.4 все ок.
Давайте текст ошибки и номер строки MainActivity.

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


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

Зарегистрирован: 27 ноя 2012, 21:25
Сообщений: 27
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
здравствуйте,что то я не пойму чем является Object data из метода
@Override
public boolean setViewValue(View view, Object data,String textRepresentation)
Цитата:
В случае llLoad мы ожидаем данные типа int, поэтому выполняем приведение Object к Integer и получаем данные по загрузке из массива.

из какого массива?


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

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

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


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

Зарегистрирован: 27 ноя 2012, 21:25
Сообщений: 27
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
откуда он взялся? где мы его инициализировали? и самый главный вопрос чем инициал Object data?


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

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

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


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

Зарегистрирован: 27 ноя 2012, 21:25
Сообщений: 27
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
если вы имеете в виду
Цитата:
// массив данных
int load[] = { 41, 48, 22, 35, 30, 67, 51, 88 };

то очень не очевидно как он попадает в class MyViewBinder. Я понял это так:
Adapter пробирает массивы from, to , данные из from- это ключ map по ключу берется значение. Это значение и будет Object data. А View инициализир значением из массива to
Так?


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

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


вы не до конца понимаете принцип работы адаптера:
1) в адаптере хранятся данные лист data;
2) в адаптере хранятся атрибуты from по которым адаптер определяет что и куда писать;
3) в адаптере хранятся айди вьюшек куда писать to;
4) ну и сам лейаут хранится от куда брать эти вьюшки (to);

что же происходит внутри адаптера? а происходит такой себе цикл:
Код: [ Загрузить ] [ Скрыть ]
  1. for(int i = 0; i < getLength(); i++) { 
  2. setViewValue(to[i], data.get(i), from[i]); 

data.get(i) передаётся в виде объекта, но мы же знаем что передавали в адаптер int, по этому можем с лёгкостью скастить в Integer обратно. Вот примерно такая логика...

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


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

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


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

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