1

私はAndroidプログラミングを学ぼうとしています。そして、このアルゴリズムの説明が見つかりません:

public View getView(int r, View convertView, ViewGroup parent) {
  ViewHolder holder = null;
  // Si la vue n'est pas recyclée
  if(convertView == null) {
    // On récupère le layout
    convertView  = mInflater.inflate(R.layout.item, null);

    holder = new ViewHolder();
    // On place les widgets de notre layout dans le holder
    holder.mNom = (TextView) convertView.findViewById(R.id.nom);
    holder.mNumero = (TextView) convertView.findViewById(R.id.numero);
    holder.mPhoto = (ImageView) convertView.findViewById(R.id.photo);

    // puis on insère le holder en tant que tag dans le layout
    convertView.setTag(holder);
  } else {
    // Si on recycle la vue, on récupère son holder en tag
    holder = (ViewHolder)convertView.getTag();
  }

  // Dans tous les cas, on récupère le contact téléphonique concerné
  Contact c = (Contact)getItem(r);
  // Si cet élément existe vraiment…
  if(c != null) {
    // On place dans le holder les informations sur le contact
    holder.mNom.setText(c.getNom());
    holder.mNumero.setText(c.getNumero());
  }
  return convertView;
}
  • ライターが convertView が null かどうか、そうでないかどうかを確認するのはなぜですか?
  • このコンテキストでの ViewHolder パターンの必要性は何ですか?

誰かがそれを理解するのを手伝ってくれますか?

前もって感謝します。

4

2 に答える 2

1

ドキュメントからの引用

findViewById()のスクロール中にコードが頻繁に呼び出され、ListViewパフォーマンスが低下する可能性があります。アダプターがリサイクルのために膨張したビューを返した場合でも、要素を検索して更新する必要があります。を繰り返し使用する方法findViewById()は、「ビュー ホルダー」デザイン パターンを使用することです。

オブジェクトは、レイアウトのタグ フィールド内に各コンポーネント ビューを格納するViewHolderため、繰り返し検索する必要なくすぐにアクセスできます。まず、正確なビューのセットを保持するクラスを作成する必要があります

詳細はこちら

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

リストビューでこのビデオもチェックしてください

http://www.youtube.com/watch?v=wDBM6wVEO70

また、リストビューはビューをリサイクルします。詳細については、以下のリンクを確認してください

ListView のリサイクル メカニズムのしくみ

于 2013-09-28T16:58:18.913 に答える