ListView становится медленным, когда вызывается метод Base adapter.getview () - PullRequest
0 голосов
/ 14 сентября 2011

Я отлаживал свое приложение и увидел, что когда я прокручивал просмотр списка, вызывается метод getView () класса BaseAdapter для генерации новых представлений

public View getView(int position, View convertView, ViewGroup parent) {
    Article article = this.articles.get(position);
    return new MainView(this.context, articulo.getTitle() , articles.getDescription(),articles.getImgUrl());)  }

, когда я прокручиваю listActivity, чтобы увидетьновые элементы, которые этот метод вызывается снова для создания представленных ниже элементов представления списка, в результате чего элементы списка имеют изображения, которые замедляет ListActivity, есть ли способ создать все представления элементов один раз, а не создавать элементы ListItems во время прокруткиlistActivity

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

ListViews высоко оптимизированы для производительности, вы должны использовать ViewHolder внутри ListAdapter для кэширования ListItems.

check http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

правило: сначала настройте свой customview, упакуйте всевнутри вашего держателя и прикрепите этот держатель к представлению, во второй раз, когда используется представление, android просто извлекает информацию о держателе (очень быстро).

0 голосов
/ 14 сентября 2011

Вы не должны создавать новый View для каждого вызова getView. Передаваемый convertView позволяет повторно использовать существующее представление. В вашем случае это будет экземпляр MainView. Таким образом, вы можете сделать что-то вроде этого:

MainView mv;
if (convertView != null){
  mv = (MainView) convertView;
  ((TextView) mv.findViewById(R.id.title)).setText(articulo.getTitle());
  // similar for description and imgUrl
} else {
  mv = new MainView(...);
}
return mv;

Кроме того, вы можете использовать шаблон ViewHolder, предложенный Микеле. Это позволит вам избежать поиска findViewById при установке заголовка и т. Д. Вот отличное объяснение ViewHolder .

0 голосов
/ 14 сентября 2011

Вероятно, он замедляется из-за количества создаваемых объектов.Для производительности вы должны повторно использовать ваши строки.См. Реализацию getView здесь: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List4.html и http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html

...