Урок 50. SimpleAdapter. Используем ViewBinder

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

Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение damager82 » 23 янв 2012, 07:15

В этом уроке:

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

Click here to read this article!
Последний раз редактировалось damager82 02 май 2017, 23:36, всего редактировалось 6 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
Crime
Сообщения: 4
Зарегистрирован: 02 мар 2012, 18:33

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение Crime » 22 мар 2012, 16:37

Подскажите, пожалуйста, правильно ли я понимаю, что сделанное, в предыдущем уроке при помощи класса MySimpleAdapter можно реализовать и используя свой обработчик адаптера? И наоборот? Если да - то существуют ли какие-то рекомендации к использованию? Или это абсолютно ситуативный выбор?

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение damager82 » 26 мар 2012, 09:31

Да, можно и свой кастомный использовать. Задачи урока не всегда решены самым простым способом, но всегда раскрывают тему урока )

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

beginner
Сообщения: 4
Зарегистрирован: 17 апр 2012, 11:24

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение beginner » 17 апр 2012, 11:40

Доброго времени суток всем!
У меня код урока 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 утра уже на работе, значит он еще на работе.

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение damager82 » 17 апр 2012, 14:37

beginner писал(а):У меня код урока 50 заработал только после
коррекции кода:
А в чем конкретно коррекция?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

beginner
Сообщения: 4
Зарегистрирован: 17 апр 2012, 11:24

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение beginner » 18 апр 2012, 14:01

Записан код:
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

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение damager82 » 19 апр 2012, 09:29

beginner писал(а):т.е. функция getResources() скорректирована в метод класса View
Интересно.
А до этой коррекции не компилировалось и выдавало ошибку?
Или просто не возвращало значение цвета?
Что именно не работало?
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

beginner
Сообщения: 4
Зарегистрирован: 17 апр 2012, 11:24

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение beginner » 20 апр 2012, 09:46

до этой коррекции не компилировалось и выдавало ошибку:

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

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

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

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение damager82 » 20 апр 2012, 09:59

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
ИзображениеИзображение

beginner
Сообщения: 4
Зарегистрирован: 17 апр 2012, 11:24

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение beginner » 21 апр 2012, 10:43

damager82 писал:

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

верно!!!

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

dubok79
Сообщения: 12
Зарегистрирован: 24 ноя 2012, 13:41

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение dubok79 » 24 ноя 2012, 17:02

Я так и не понял как в LinearLayout вставили данные. У меня ошибка постоянно вылетает.

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение damager82 » 27 ноя 2012, 10:08

dubok79 писал(а):Я так и не понял как в LinearLayout вставили данные. У меня ошибка постоянно вылетает.
Показывайте код, если не 100% с урока скопировали
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

dubok79
Сообщения: 12
Зарегистрирован: 24 ноя 2012, 13:41

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение dubok79 » 27 ноя 2012, 10:15

Да, урок полностью скопировал. запускал правда на дроиде 4.0.3

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение damager82 » 27 ноя 2012, 14:39

dubok79 писал(а):Да, урок полностью скопировал. запускал правда на дроиде 4.0.3
На 4.0.4 все ок.
Давайте текст ошибки и номер строки MainActivity.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

lavan
Сообщения: 27
Зарегистрирован: 27 ноя 2012, 20:25

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение lavan » 27 ноя 2012, 20:41

здравствуйте,что то я не пойму чем является Object data из метода
@Override
public boolean setViewValue(View view, Object data,String textRepresentation)
В случае llLoad мы ожидаем данные типа int, поэтому выполняем приведение Object к Integer и получаем данные по загрузке из массива.
из какого массива?

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение rezak90 » 27 ноя 2012, 21:19

из массива данных
R.id.team
Политика на форуме запрещена

lavan
Сообщения: 27
Зарегистрирован: 27 ноя 2012, 20:25

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение lavan » 27 ноя 2012, 21:24

откуда он взялся? где мы его инициализировали? и самый главный вопрос чем инициал Object data?

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение rezak90 » 27 ноя 2012, 21:46

смотрите пример внимательно... массив данных int[]
R.id.team
Политика на форуме запрещена

lavan
Сообщения: 27
Зарегистрирован: 27 ноя 2012, 20:25

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение lavan » 27 ноя 2012, 22:05

если вы имеете в виду
// массив данных
int load[] = { 41, 48, 22, 35, 30, 67, 51, 88 };
то очень не очевидно как он попадает в class MyViewBinder. Я понял это так:
Adapter пробирает массивы from, to , данные из from- это ключ map по ключу берется значение. Это значение и будет Object data. А View инициализир значением из массива to
Так?

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

Re: Урок 50. SimpleAdapter. Используем ViewBinder

Сообщение rezak90 » 27 ноя 2012, 22:32

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

что же происходит внутри адаптера? а происходит такой себе цикл:

Код: Выделить всё

for(int i = 0; i < getLength(); i++) {
setViewValue(to[i], data.get(i), from[i]);
}
data.get(i) передаётся в виде объекта, но мы же знаем что передавали в адаптер int, по этому можем с лёгкостью скастить в Integer обратно. Вот примерно такая логика...
R.id.team
Политика на форуме запрещена

Ответить