0

Я хотел бы создать меньше работы для метода getView андроидного списка Adapter. Я читал, что мы можем позволить ViewGroup обновлять представление вместо метода getView и, таким образом, ускорить прокрутку. Мне нужна помощь в понимании этого понятия, и вот что я до сих пор:Адаптер Android getView лучше развязывает с помощью viewGroup

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    MyViewGroup myViewGroup; 
    if (convertView == null) { 
     myViewGroup = (MyViewGroup) LayoutInflater.from(context) 
      .inflate(R.layout.banana_phone, parent, false); 
    } else { 
     myViewGroup = (MyViewGroup) convertView; 
    } 

    InfoObject info = getItem(position); 

    myViewGroup.update(info); //how does this part work ? this is synchrounous so getView has to wait, doesn't it ? 

    return myViewGroup; 
} 

Я получил эту идею из этого site

Так что мой вопрос, как я могу сделать обновление ViewGroup, не давая GetView ждать. Я верю в реализацию, которую я получил выше. GetView будет ждать обновления группы просмотра, правильно? так что это все равно замедлит список. Я хотел бы привести пример того, как будет выглядеть пользовательская группа просмотра (или нестандартная, если это так)?

Может ли кто-нибудь привести пример того, как будет выглядеть MyViewGroup после расширения ViewGroup, и сказать, что обновление текстового представления в представлении списка как im не понимает, как структурировать настраиваемую группу представлений, чтобы, например, обновлять текстовое представление?

+0

* viewGroup update без разрешения getView wait * ... это сложно ... * правильно? * Правильно ... помните, что этот код повторно использует представления ... так что если вы позволяете * .update * быть " отложено «каким-то образом вы можете столкнуться с проблемой устаревания данных (myViewGroup следует обновить в другом инфо-объекте) ... хороший пример того, как он может быть реализован, скрыт внутри кода загрузчика изображения ... – Selvin

+2

Похоже, он просто кладет все обновление в ViewGroup, которое обычно находится в «getView()». Это не ускоряет или замедляет ListView. Это просто перемещение работы из одного класса в другой. – DeeV

+2

В основном адаптер должен знать только о MyViewGroup. Он не должен знать, какие элементы View находятся внутри MyViewGroup, поэтому легче вносить изменения. – DeeV

ответ

0

Вы правы, звонок update является (и должен быть!) Синхронным, и getView придется подождать.

Создание собственного ViewGroup для лучшего списка decoupling - оно не имеет преимуществ по производительности, а скорее переносит настройку значений в представлении в отдельный класс адаптера. Если вы затем использовали это представление в другом макете, например в виде заголовка в подробном представлении, вы уменьшили бы дублирование кода, используя метод update.

+1

Думаю, я понял. таким образом, группа просмотра может быть повторно использована в другом списке, если она имеет один и тот же тип элементов. Это отлично. У DeeV также была правильная идея +1. – j2emanue

Смежные вопросы