Viewer писал(а):Конечно в BaseAdapter этих методов нет, но для лучшей структуризации кода при написании своих адаптеров тоже не помешает отделять данные от представлений это нормальная практика.
Что касается bindView, то если данные SimpleAdapter биндятся не только на view Checkable, TextView или ImageView то имеет смысл реализовать ViewBinder, иначе можно обойтись без него. Считаю что лепить все в getView(), будет не очень грамотно. а если у вас для всех элементов списка используется одна и та же разметка, то и вовсе нет смысла переопределять getView().
Достаточно часто для видоизменения элементов списка, используется прием скрытия/отображения отдельных View-компонентов разметки в зависимости от набора данных, что так же не требует реализации getView().
В общем смысл моего поста не в том что нельзя или можно что-то там сделать, а в том, что если есть дверь, то какой смысл ходить через окно или изобретать велосипеды. Нужно сразу приучать себя писать хороший структуированный код в котором даже самому потом, по прошествии времени, будет легче разобраться, не говоря уже о том, что в вашем коде будет пытаться разобраться кто-то другой.
Я ж не со зла пишу, и не потому что в интернет кто то не прав (с) мне реально интересно.
К примеру довольно частая задача - в элементе списка есть кнопка на которую нужно навесить клик листенер, как это сделать не переопределяя getView() ?
>>>Достаточно часто для видоизменения элементов списка, используется прием скрытия/отображения отдельных View-компонентов разметки в зависимости от набора данных, что так же не требует реализации getView().
Мы же говорит про наследника BaseAdapter или как? Да даже в случае SimpleAdapter как достигается "скрытия/отображения отдельных View-компонентов разметки в зависимости от набора данных" без переопределения getView()?
>>>для лучшей структуризации кода при написании своих адаптеров тоже не помешает отделять данные от представлений это нормальная практика.
абсолютно согласен
>>>Нужно сразу приучать себя писать хороший структуированный код в котором даже самому потом, по прошествии времени, будет легче разобраться, не говоря уже о том, что в вашем коде будет пытаться разобраться кто-то другой
абсолютно согласен
>>>Считаю что лепить все в getView(), будет не очень грамотно
По поводу этого момента я делаю как показано еще в древнем видео "Google I/O 2010 - The world of ListView", может я и не прав. Ведь никто на говорит в методе getView() должно быть больше 1000 строк.
Я обычно использую что-то типа такого:
Код: Выделить всё
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(MyActivity.this);
convertView = inflater.inflate(R.layout.item, parent, false);
}
instantiateView(convertView, getItem(position));
return convertView;
}
private void instantiateView(View itemViev, SomeType item){...};
Для меня и для тех кто читал мой код он предельно понятен, в методе instantiateView() мапится(проецируется, биндится) item на itemViev без создания всяких дополнительных объектов типа биндер.