2012-09-15 22 views
8

Android programlamaya yeni başladım ve Adapters ile ilk adımları yapıyorum (ListView için).Bağdaştırıcıyı geçersiz kılar.

public View getView(int position, View convertView, ViewGroup parent) { 

    View itemView = null; 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) parent.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemView = inflater.inflate(R.layout.table_row, null); 
    } else { 
     itemView = convertView; 
    } 

    // play with itemView 

    return itemView; 
} 

Sorum buna karşı konuşur budur:

public View getView(int position, View convertView, ViewGroup parent) { 

    View itemView = super(position, convertView, parent); 

    // play with itemView 

    return itemView; 
} 

Bu benim için iş gibi görünüyor ama büyük bir var eminim Adapter.getView Sık sık böyle şeyleri görmek geçersiz kılma

eksik nokta: D

Okumak için teşekkürler ve kötü ingilizce için özür dilerim ...

cevap

6

, veya ArrayAdapter gibi, zaten uygulamalarının getView() için var.

Bunlara bir bakın: ArrayAdapter için http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/ArrayAdapter.java#361 ve SimpleAdapter için http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/SimpleAdapter.java#113. Eğer BaseAdapter türeyen, size ilk örnekte tarif ettik gibi kutunun dışına olmadığından, bütün yöntemi uygulamak manuel zorunda kalacak

: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/BaseAdapter.java#BaseAdapter

2

Bağdaştırıcının getView(..)-yöntemi birden çok yol olabilir. Tek soru şu ki hangisi en verimli?

ilginç bir makale okumak ve daha ayrıntılı ListView anlamasını sağlamak: Eğer (değil BaseAdapter) adaptörleri "kullanıma hazır" çıkartılan sadece eğer

View itemView = super(position, convertView, parent); 

kullanabilirsiniz http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

1

bunu kastediyorsan ve sonra - (ekranınızın + görünür olan hücre sayısı eşittir) kod parçası Android hücrelerinin nispeten az sayıda oluşturmanıza olanak sağlar: bu kod parçası:

if (convertView == null) { 
    LayoutInflater inflater = (LayoutInflater) parent.getContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    itemView = inflater.inflate(R.layout.table_row, null); 
} else { 
    itemView = convertView; 
} 

sizin için gereksiz görünüyor bu hücreleri "geri dönüştürün" - kullanıcı listeyi kaydırmak yerine listeyi kaydırırken tekrar tekrar kullanın Dizinizdeki her nesne için hücre. Bu size yardımcı olacaktır:

  1. Tasarruf bellek - Eğer dizide

  2. CPU kullanımını kaydetme her bir eleman için görünüm oluşturmak yok çünkü - xml dosyasının dışında bir görünüm nesnesi oluşturarak ("şişirme "), göreceli olarak pahalı bir görevdir ve dizinizdeki her öğe için bunu yaparken, kullanıcı arabiriminiz

İlgili konular