8

私はAndroidプログラミングに不慣れで、アダプターを使用して最初のステップを実行します(の場合ListView)。

オーバーライドするAdapter.getViewと、次のようなことがよくあります。

public View getView(int position, View convertView, ViewGroup parent) {

    View itemView = null;

    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) parent.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        itemView = inflater.inflate(R.layout.table_row, null);
    } else {
        itemView = convertView;
    }

    // play with itemView

    return itemView;
}

私の質問は、これに反対するものです。

public View getView(int position, View convertView, ViewGroup parent) {

    View itemView = super(position, convertView, parent);

    // play with itemView

    return itemView;
}

これは私にとってはうまくいくようですが、私が見逃している大きなポイントがあると確信しています:D

読んでくれてありがとう、私の悪い英語をお詫びします...

4

3 に答える 3

6

使用できます

View itemView = super(position, convertView, parent);

の実装がすでにあるため、、、などの「すぐに使用できる」アダプタ(ではないBaseAdapter)から派生している場合のみ。SimpleAdapterArrayAdaptergetView()

それらを見てください:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/ArrayAdapter.java#361 for ArrayAdapter、および SimpleAdapterの場合はhttp://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/SimpleAdapter.java#113

から派生した場合BaseAdapterは、最初の例で説明したように、メソッド全体を手動で実装する必要があります。これは、http://grepcode.com/file/repository.grepcodeから派生したものではないためです。 com / java / ext / com.google.android / android / 4.0.4_r2.1 / android / widget / BaseAdapter.java#BaseAdapter

于 2012-09-15T18:57:52.520 に答える
2

getView(..)アダプタのメソッドは複数の方法があります。唯一の質問は、どれが最も効率的かということです。

ListViewを読んで理解してもらうための興味深い記事:http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

于 2012-09-15T18:37:24.887 に答える
1

このコードを意味する場合:

if (convertView == null) {
    LayoutInflater inflater = (LayoutInflater) parent.getContext()
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    itemView = inflater.inflate(R.layout.table_row, null);
} else {
    itemView = convertView;
}

このコードにより、Androidは比較的少数のセル(画面に表示されるセルの数に等しい+-)を作成し、これらのセルを「リサイクル」することができます。これらのセルを繰り返し使用します。配列内のオブジェクトごとにセルを作成する代わりに、ユーザーがリストをスクロールしている間。これは次のことに役立ちます。

  1. メモリの節約-配列内の各要素のビューを作成しないため

  2. CPU使用率の節約-xmlファイルからビューオブジェクトを作成する(「膨張する」)のは比較的コストのかかる作業であり、配列内の各アイテムに対してこれを行うと、UIスレッドが詰まる可能性があります

于 2012-09-15T19:35:11.230 に答える