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

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

Добавлено: 23 янв 2012, 07:15
damager82
В этом уроке:

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

Click here to read this article!

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

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

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

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

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

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

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

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

Добавлено: 17 апр 2012, 14:37
damager82
beginner писал(а):У меня код урока 50 заработал только после
коррекции кода:
А в чем конкретно коррекция?

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

Добавлено: 18 апр 2012, 14:01
beginner
Записан код:
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

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

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

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

Добавлено: 20 апр 2012, 09:46
beginner
до этой коррекции не компилировалось и выдавало ошибку:

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

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

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

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

Добавлено: 20 апр 2012, 09:59
damager82
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 по соседству с основным классом.

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

Добавлено: 21 апр 2012, 10:43
beginner
damager82 писал:

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

верно!!!

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

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

Добавлено: 24 ноя 2012, 17:02
dubok79
Я так и не понял как в LinearLayout вставили данные. У меня ошибка постоянно вылетает.

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

Добавлено: 27 ноя 2012, 10:08
damager82
dubok79 писал(а):Я так и не понял как в LinearLayout вставили данные. У меня ошибка постоянно вылетает.
Показывайте код, если не 100% с урока скопировали

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

Добавлено: 27 ноя 2012, 10:15
dubok79
Да, урок полностью скопировал. запускал правда на дроиде 4.0.3

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

Добавлено: 27 ноя 2012, 14:39
damager82
dubok79 писал(а):Да, урок полностью скопировал. запускал правда на дроиде 4.0.3
На 4.0.4 все ок.
Давайте текст ошибки и номер строки MainActivity.

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

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

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

Добавлено: 27 ноя 2012, 21:19
rezak90
из массива данных

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

Добавлено: 27 ноя 2012, 21:24
lavan
откуда он взялся? где мы его инициализировали? и самый главный вопрос чем инициал Object data?

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

Добавлено: 27 ноя 2012, 21:46
rezak90
смотрите пример внимательно... массив данных int[]

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

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

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

Добавлено: 27 ноя 2012, 22:32
rezak90
данные упаковываются в лист.
то очень не очевидно как он попадает в 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 обратно. Вот примерно такая логика...