29

Androidでは、通常、MyAdapter extends ArrayAdapterのビューを作成するために使用しますListView。その結果、関数をオーバーライドする必要があります

public View getView(int position, View convertView, ViewGroup parent) {
    // somecode here
}

しかし、私は正確に何convertViewをしているのかわかりparentません!誰か提案がありますか?もっと詳しく、もっと助けて!ありがとう!

4

4 に答える 4

51

ドキュメントから、

convertView - 可能であれば、再利用する古いビュー。注: 使用する前に、このビューが null ではなく、適切な型であることを確認する必要があります。このビューを変換して正しいデータを表示できない場合は、このメソッドで新しいビューを作成できます。

つまり、このパラメータは のパフォーマンスを向上させるために厳密に使用されますAdapter。が をListView使用しAdapterてその行をViews で埋める場合、アダプタは各行でViewを呼び出しgetView()て、各リスト項目にオブジェクトを設定します。アダプターは、使用されなくなったconvertView古いオブジェクトをリサイクルする方法として を使用します。Viewこのようにして、 はListView、アダプタが新しいリスト項目を表示するたびにまったく新しいオブジェクトをインスタンス化する代わりに、表示されなくなった古い「リサイクルされた」ビュー オブジェクトをアダプタに送信できます。convertViewこれがパラメータの目的です。

于 2012-05-12T02:46:02.317 に答える
30

convertView古いビューを再利用するために使用されます。

AndroidのAdapter 機能を理解してください。Adapter一部のビューを新しいデータで再利用できます。

したがって、リストが15アイテムで、ウィンドウに表示できるアイテムが5つだけの場合、最初convertViewはnullになり、これら5つのアイテムの新しいビューを作成する必要がありますが、下にスクロールすると、2つのオプションがあります。 -10ビュー、または古いビューを再利用して、これらのビューに新しいデータをロードします。 Adapter後の方法をconvertView実行できます。

于 2012-05-12T04:32:49.897 に答える
5

convertView は、表示されない ListView アイテム キャッシュであるため、再利用できます。これにより、ListView で多くの ListItem を作成する必要がなくなるため、メモリが節約され、ListView がよりスムーズになります。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    if(convertView == null) {
        view = this.inflator.inflate(android.R.layout.simple_list_item_1, parent, false);
    }
    else {
        view = convertView;
    }
    // remaining implementation
    return view;
}
于 2012-05-12T02:46:05.847 に答える