Урок 50. SimpleAdapter. Используем ViewBinder
Урок 50. SimpleAdapter. Используем ViewBinder
Последний раз редактировалось damager82 02 май 2017, 23:36, всего редактировалось 6 раз.
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Подскажите, пожалуйста, правильно ли я понимаю, что сделанное, в предыдущем уроке при помощи класса MySimpleAdapter можно реализовать и используя свой обработчик адаптера? И наоборот? Если да - то существуют ли какие-то рекомендации к использованию? Или это абсолютно ситуативный выбор?
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Да, можно и свой кастомный использовать. Задачи урока не всегда решены самым простым способом, но всегда раскрывают тему урока )
Выбор только по функционалу. Если вам хватает возможностей стандартных адаптеров, то все ок, иначе пишете свой.
Выбор только по функционалу. Если вам хватает возможностей стандартных адаптеров, то все ок, иначе пишете свой.
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Доброго времени суток всем!
У меня код урока 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 утра уже на работе, значит он еще на работе.
У меня код урока 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
А в чем конкретно коррекция?beginner писал(а):У меня код урока 50 заработал только после
коррекции кода:
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Записан код:
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
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
Интересно.beginner писал(а):т.е. функция getResources() скорректирована в метод класса View
А до этой коррекции не компилировалось и выдавало ошибку?
Или просто не возвращало значение цвета?
Что именно не работало?
Re: Урок 50. SimpleAdapter. Используем ViewBinder
до этой коррекции не компилировалось и выдавало ошибку:
x The method getResources() is undefined for the type MyViewBinder
MyViewBinder.java /mySimpleAdapter/src/your/mySimpleAdapter line 10 Java Problem
код откомпилировался только после коррекции
x The method getResources() is undefined for the type MyViewBinder
MyViewBinder.java /mySimpleAdapter/src/your/mySimpleAdapter line 10 Java Problem
код откомпилировался только после коррекции
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Похоже, что MyViewBinder у вас не является вложенным в MainActivity классом, а просто находится в MainActivity.java по соседству с основным классом.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
damager82 писал:
Похоже, что MyViewBinder у вас не является вложенным в MainActivity классом, а просто находится в MainActivity.java по соседству с основным классом.
верно!!!
Прошу прощения за мою невнимательность!
Похоже, что MyViewBinder у вас не является вложенным в MainActivity классом, а просто находится в MainActivity.java по соседству с основным классом.
верно!!!
Прошу прощения за мою невнимательность!
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Я так и не понял как в LinearLayout вставили данные. У меня ошибка постоянно вылетает.
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Показывайте код, если не 100% с урока скопировалиdubok79 писал(а):Я так и не понял как в LinearLayout вставили данные. У меня ошибка постоянно вылетает.
Re: Урок 50. SimpleAdapter. Используем ViewBinder
Да, урок полностью скопировал. запускал правда на дроиде 4.0.3
Re: Урок 50. SimpleAdapter. Используем ViewBinder
На 4.0.4 все ок.dubok79 писал(а):Да, урок полностью скопировал. запускал правда на дроиде 4.0.3
Давайте текст ошибки и номер строки MainActivity.
Re: Урок 50. SimpleAdapter. Используем ViewBinder
здравствуйте,что то я не пойму чем является Object data из метода
@Override
public boolean setViewValue(View view, Object data,String textRepresentation)
@Override
public boolean setViewValue(View view, Object data,String textRepresentation)
из какого массива?В случае llLoad мы ожидаем данные типа int, поэтому выполняем приведение Object к Integer и получаем данные по загрузке из массива.
Re: Урок 50. SimpleAdapter. Используем ViewBinder
из массива данных
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 50. SimpleAdapter. Используем ViewBinder
откуда он взялся? где мы его инициализировали? и самый главный вопрос чем инициал Object data?
Re: Урок 50. SimpleAdapter. Используем ViewBinder
смотрите пример внимательно... массив данных int[]
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 50. SimpleAdapter. Используем ViewBinder
если вы имеете в виду
Adapter пробирает массивы from, to , данные из from- это ключ map по ключу берется значение. Это значение и будет Object data. А View инициализир значением из массива to
Так?
то очень не очевидно как он попадает в class MyViewBinder. Я понял это так:// массив данных
int load[] = { 41, 48, 22, 35, 30, 67, 51, 88 };
Adapter пробирает массивы from, to , данные из from- это ключ map по ключу берется значение. Это значение и будет Object data. А View инициализир значением из массива to
Так?
Re: Урок 50. SimpleAdapter. Используем ViewBinder
данные упаковываются в лист.
1) в адаптере хранятся данные лист data;
2) в адаптере хранятся атрибуты from по которым адаптер определяет что и куда писать;
3) в адаптере хранятся айди вьюшек куда писать to;
4) ну и сам лейаут хранится от куда брать эти вьюшки (to);
что же происходит внутри адаптера? а происходит такой себе цикл:
data.get(i) передаётся в виде объекта, но мы же знаем что передавали в адаптер int, по этому можем с лёгкостью скастить в Integer обратно. Вот примерно такая логика...
вы не до конца понимаете принцип работы адаптера:то очень не очевидно как он попадает в 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]);
}
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена