1. ホーム
  2. android

[解決済み] ArrayAdapterのgetViewTypeCountメソッドとgetItemViewTypeメソッド

2022-04-25 04:21:18

質問

の使い方を誰か分かりやすく説明してください。 getViewTypeCount()getItemViewType() のメソッドは ArrayAdapter ?

解決方法は?

これらは、異なる タイプ を表示します。たとえば、連絡先アプリケーションでは、偶数行の左側に写真を表示し、奇数行の右側に写真を表示することができます。そのような場合は、次のようにします。

@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public int getItemViewType(int position) {
    return position % 2;
}

フレームワークは、ビュータイプを使用して を経由して、どのビューを渡すか convertView での getView メソッド . つまり、上記の例では、偶数列は左側に絵があるリサイクルビューのみを取得して再利用し、奇数列は右側に絵があるもののみを取得することになります。

リスト内のすべての行が同じレイアウトであれば、ビュータイプを気にする必要はありません。実際 BaseAdapter.java は、すべてのアダプタに対してデフォルトの動作を提供します。

public int getItemViewType(int position) {
    return 0;
}

public int getViewTypeCount() {
    return 1;
}

これは確かに、すべての行に対して同じビュータイプを提供します。

編集 - で大まかな流れを説明します。

  1. データを AdapterView をアダプタで使用します。
  2. AdapterView は、ユーザーから見える項目を表示しようとします。
  3. フレームワークが呼び出す getItemViewType 行に対して n の場合は、これから表示する行を指定します。
  4. フレームワークは、リサイクルされたビュープールをチェックし、行の n のタイプです。ビューがまだリサイクルされていないため、見つかりませんでした。
  5. getView は行に対して呼び出されます n .
  6. あなたが電話する getItemViewType 行に対して n を使用して、どのような種類のビューを使用すべきかを決定します。
  7. if/switchステートメントを使用して、どのビュータイプが必要かに応じて異なるxmlファイルを膨らませるのです。
  8. ビューに情報を入力します。
  9. を終了してビューを返します。 getView そして、あなたの行のビューがユーザーに表示されます。

さて、画面外へのスクロールによってビューがリサイクルされると、フレームワークによって管理されているリサイクルビュープールに入ります。これらは基本的にビューの種類によって整理されているので、正しい種類のビューが convertView パラメータで指定します。 getView メソッドを使用します。

  1. フレームワークは再び getItemViewType を表示したい行のために使用します。
  2. 今回は、リサイクルプール内に適切なタイプのビューがあります。
  3. リサイクルされたビューを convertView パラメータを getView メソッドを使用します。
  4. リサイクルされたビューを新しい情報で満たし、それを返します。