Bu videoyu izliyorum http://www.youtube.com/watch?v=N6YdwzAvwOA ve Romain Guy, getView()
yöntemini kullanarak daha verimli UI bağdaştırıcısı kodunu nasıl yapacağınızı gösteriyor. Bu, CursorAdapters için de geçerli midir? Şu anda özel imleç adaptörlerim için bindView()
ve newView()
kullanıyorum. Bunun yerine getView kullanmalı mıyım?GetView Vs. Özel bir CursorAdapter içinde BindView?
cevap
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.
/**
* @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.
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()
:
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.
Teşekkür ederim, çok yardımcı. – LarsH
ViewHolder kalıbını nasıl uygularım? NewView() ve bindView() arasında böler miyim? –
@Scienceprodigy: newView() 'de, satır için' ViewHolder 'öğesini ve setTag() 'ile ilişkilendirirsiniz. BindView() 'da,' ViewHolder'ı 'getTag()' yoluyla alabilirsiniz. – CommonsWare
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. –