3

ViewAndroid での再利用を管理するソース コードはどこにありますか? このプロセスには 3 つの異なる部分が考えられますが、さらに多くの部分がある可能性があります。

  1. Viewが再利用できるかどうかを判断するロジック
  2. View再利用可能な のプールを管理するコード
  3. Viewプールから再利用可能なものを削除し、そのプロパティ値をリセットして、論理的に異なるものを表すコードView

編集:ブログ投稿Android 用アプリケーションの開発 – 落とし穴と癖では、次の例を示します。

public class PencilWise extends ListActivity {
    View activeElement;
    // ...
    @Override
    public void onCreate ( Bundle savedInstanceState ) {
        // ...
        this.getListView( ).setOnItemClickListener ( new OnItemClickListener ( ) {
            public void onItemClick ( AdapterView<?> parent, View view, int position, long id ) {
                MyActivity.this.activeElement = view;
                MyActivity.this.showDialog ( DIALOG_ANSWER );
            }
        } );
    }
}

このshowDialogメソッドは、ユーザーが開いた質問を知る必要がある回答ダイアログを表示します。問題は、ダイアログが開くまでに、渡されたビューがonItemClick再利用されている可能性があるためactiveElement、ユーザーが最初にダイアログを開くためにクリックした要素を指していないことです!

4

2 に答える 2

3

ビューのリサイクルは、AbsListViewとそのサブクラスListViewおよびによって実行されGridViewます。これらのクラスのソース コードは、https ://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget にあります。

ListViewとから始めAbsListViewます。

于 2011-02-04T05:48:36.843 に答える
1

あなたが探しているものの良い例は、パッケージAbsListView.RecycleBinにある内部クラスにあると思います。 ここでオンラインでコードを見ることができます: https ://android.googlesource.com/platform/frameworks/base/+/android-2.2_r1.1/core/java/android/widget/AbsListView.java#3888widget

ドキュメントからの抜粋は次のとおりです。

RecycleBinは、レイアウト間でのビューの再利用を容易にします。RecycleBinには、ActiveViewsとScrapViewsの2つのレベルのストレージがあります。ActiveViewsは、レイアウトの開始時に画面に表示されていたビューです。構造上、現在の情報を表示しています。レイアウトの最後に、ActiveViewsのすべてのビューがScrapViewsに降格されます。ScrapViewsは、ビューの不必要な割り当てを回避するためにアダプターによって使用される可能性のある古いビューです。

于 2011-02-04T03:26:32.823 に答える