2010-12-07 11 views
37

AdapterクラスのgetView()メソッドでconvertViewパラメータが使用されていることを教えてもらえますか?ここでArrayAdapter getView()メソッドの "convertView"パラメータとは

hereからのサンプルコードテイクです:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.row, null); 
    } 
    Order o = items.get(position); 
    if (o != null) { 
     TextView tt = (TextView) v.findViewById(R.id.toptext); 
     TextView bt = (TextView) v.findViewById(R.id.bottomtext); 
     if (tt != null) { 
      tt.setText("Name: "+o.getOrderName());       } 
     if(bt != null){ 
      bt.setText("Status: "+ o.getOrderStatus()); 
     } 
    } 
    return v; 
} 

は、我々はconvertViewを経由して何を渡す必要がありますか?

私が見つけた何

take from here

データセット内の指定された位置にデータを表示するビューを取得します。ビューを手動で作成するか、 XMLレイアウトファイルから展開することができます。ビューが膨張したとき、あなたがルートビュー を指定するとの付着を防止するために のinflate(int型、android.view.ViewGroup、boolean)を使用しない限り、親ビュー(GridViewコントロール、 リストビューは...)デフォルトのレイアウトパラメータを適用しますその根。

パラメータ

位置 - ビュー私たちが望む項目のアダプタのデータセット内の項目の位置。

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

- 指定された位置のデータに対応するビュー - このビューは、最終的に戻り

戻りに添付されます親。

答えて

38

あなたは自分でそのメソッドを呼び出すべきではありません。

AndroidのListViewは、と入力するためにAdapterを使用しています。 ListViewが表示されたら、それは自分自身を移入するgetView()を呼び出して開始します。ユーザーがスクロールは、新しいビューを作成する必要があるときは、そのパフォーマンスのためListViewはこれ以上convertViewのparamで使用されていないことをAdapter古いビューを送信します。

私はかなりこのことを理解していなかった
+1

「ユーザーがスクロールは、新しいビューを作成する必要がある場合には、パフォーマンスのために、リストビューはアダプタにこれ以上convertViewのPARAMで使用されていないことを古いビューを送信しますので、。」あなたは 'ListView'は一度にすべてのビューに値を設定しないと言っていますか? – Tarik

+1

@Braveyard:いいえ。 'ListView'が1.000個のアイテムを保持するとします。メモリにすべてをロードすることはできませんし、画面に表示するには最小量を使用します。 – Macarse

+12

重要な副作用は、ListViewのビューに状態情報を格納することが災害になることです。ビューにではなく、アダプタにアイテムごとの状態を必ず格納してください。 – jjb

関連する問題