2010-08-20 22 views

cevap

72

CursorAdapter satır geri dönüşüm modelini şekilde newView() ve bindView(), delegeleri zorlar olarak getView() gerçeklenimine. Bu nedenle, newView() ve bindView()'u geçersiz kılarsanız, satır geri dönüşümü için CursorAdapter ile özel bir şey yapmanıza gerek yoktur.

+6

ViewHolder kalıbını nasıl uygularım? NewView() ve bindView() arasında böler miyim? –

+17

@Scienceprodigy: newView() 'de, satır için' ViewHolder 'öğesini ve setTag() 'ile ilişkilendirirsiniz. BindView() 'da,' ViewHolder'ı 'getTag()' yoluyla alabilirsiniz. – CommonsWare

+0

Teşekkürler, bu işe yarıyor. Yine de, görüntülerin geri dönüşümü ile ilgili bir sorunum var, çünkü varsayılan bölümleri görüntülemek için kullandığım varsayılan olarak GONE olan bir başlık içeren liste öğelerim var. Listeyi yukarı veya aşağı fırlatıncaya kadar her şey iyi görünüyor, sonra üstbilgileri nerede olmamalı diye gösteriliyor. –

18
/** 
    * @see android.widget.ListAdapter#getView(int, View, ViewGroup) 
    */ 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (!mDataValid) { 
      throw new IllegalStateException("this should only be called when the cursor is valid"); 
     } 
     if (!mCursor.moveToPosition(position)) { 
      throw new IllegalStateException("couldn't move cursor to position " + position); 
     } 
     View v; 
     if (convertView == null) { 
      v = newView(mContext, mCursor, parent); 
     } else { 
      v = convertView; 
     } 
     bindView(v, mContext, mCursor); 
     return v; 
    } 

Bu CursorAdapter kaynak kodu, açıkça daha işe CursorAdapter.

2

CursorAdapter uygulama BaseAdapter gibi alt classing düzenli adaptörler farklıdır, sen getView(), getCount(), getItemId() bu bilgi imleç kendisinden alınabilir çünkü geçersiz kılmak gerekmez. Bir görünüm göz önüne alındığında sağlanan imleç verileri görüntülemek için güncelleyin:

bindView():

yalnızca CursorAdapter alt sınıfı oluşturmak için iki yöntem geçersiz kılmak gerekir, bir Cursor Verilen.

newView(): Bu, listeye giden yeni bir görünümü yapılandırmaya çağrılır.

CursorAdapter, geri dönüşüm görünümleriyle ilgilenir (normal Adapter'daki getView() yönteminin aksine). Yeni bir satıra ihtiyaç duyduğu her seferinde newView()'u aramaz. Zaten bir View (null değil) varsa, doğrudan bindView()'u arar, bu şekilde oluşturulan görünüm yeniden kullanılır. Her bir görünümün oluşturulmasını ve popülasyonunu bu iki yönteme bölmek suretiyle, CursorAdapter, düzenli bağdaştırıcılarda, her ikisinin de getView() yöntemiyle gerçekleştirildiği yerlerde yeniden kullanım sağlar.

+2

Teşekkür ederim, çok yardımcı. – LarsH

İlgili konular