0

アプリケーションをデバッグしていて、リストビューをスクロールしているときに、クラス BaseAdapter のメソッド getView() が呼び出されて新しいビューが生成されることがわかりました

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 が遅くなります。すべてのアイテム ビューを一度作成する方法はありますか。 listActivity をスクロールしているときに ListItems を作成しない

4

3 に答える 3

2

ListView はパフォーマンスのために高度に最適化されているため、ListAdapter 内で ViewHolder を使用して ListItem をキャッシュする必要があります。

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.htmlを確認してください

ルールは、最初にカスタムビューを設定し、ホルダー内にすべてをパックして、このホルダーをビューに固定します.2回目は、ビューがandroidで単純にホルダー情報を抽出します(非常に高速です)。

于 2011-09-14T18:36:17.010 に答える
0

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;

さらに、Micheleによって提案されたViewHolderパターンを使用できます。これにより、タイトルなどを設定するときにfindViewByIdルックアップを回避できます。これがViewHolderの優れた説明です

于 2011-09-14T19:30:46.480 に答える
0

作成されるオブジェクトの数が原因で、おそらく速度が低下しています。パフォーマンスのために、行を再利用する必要があります。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

于 2011-09-14T18:29:03.267 に答える