SORU
14 AĞUSTOS 2012, Salı


Nasıl'un geri dönüşüm mekanizması çalışır Liste Görünümü

Önce bu sorun var, ve doğal olarak here yardım istedim. Luksprog cevabı Liste Görünümü ve Denetim Görüşlerini geri dönüşüm ile kendisini optimize hakkında hiçbir fikrim yoktu, çünkü harikaydı. Onun tavsiyesi ile benim Denetim Manzaralı ekledim nasıl değiştirmek için başardı. Sorun mantıklı olmayan bir şey var şimdi. Bu ** 4 BaseAdapter benim


public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            convertView = inflater.inflate(R.layout.day_view_item, parent, false);
        }
        Log.d("DayViewActivity", "Position is: " position);
        ((TextView)convertView.findViewById(R.id.day_hour_side)).setText(array[position]);
        LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.day_event_layout);

        //layout.addView(new EventFrame(parent.getContext()));

        TextView create = new TextView(DayViewActivity.this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 62, getResources().getDisplayMetrics()), 1.0f);
        params.topMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
        params.bottomMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
        create.setLayoutParams(params);
        create.setBackgroundColor(Color.BLUE);
        create.setText("Test"); 
        //the following is my original LinearLayout.LayoutParams for correctly setting the TextView Height
        //new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()), 1.0f)   
        if(position == 0) {
            Log.d("DayViewActivity", "This should only be running when position is 0. The position is: " position);
            layout.addView(create);
        }

        return convertView;
    }

}

Sorun 0... 6 konum gibi Görünüyor ve 8 artı 8, iki pozisyona koyar pozisyon pozisyon kaydırma zaman böyle değildir. Şimdi hala bu neden oluyor anlamıyorum yani Liste Görünümü ve Denetim kullanarak alışmaya çalışıyorum. Bu soruyu yapıyorum ana nedenlerinden biri, muhtemelen Liste Görünümü ve Denetim Görünüm, ya da article koyar bu şekilde geri dönüşüm hakkında bilmeyen, ScrapView mekanizması başkalarına yardım etmektir.

enter image description here

Daha Sonra Düzenleyin

Google IO link ekleme temelde Liste Görünümü nasıl çalıştığını anlamak için ihtiyacınız olan tek şey konuşmak. Bağlantı yorumların içinde ölmüştü. User3427079 bu bağlantıyı güncelleştirmek için yeterince iyi oldu. Here kolay erişim için.

CEVAP
1 Ocak 2013, Salı


Başlangıçta da liste görünümü geri dönüşüm ve convertview kullanım mekanizması haberim yoktu, ama bir gün sonra ben çok fazla *20 görüntüye bakarak listesi mekanizmaları görünümünü anlama araştırması* enter image description here

Hiç liste görünümü bir adaptör ile dolu olduğunda bu temelde sayısını gösterirSatırliste görünümü ekran ve satır sayısını göstermek bakmıyor liste kaydırma bile artış olabilir, bu liste görünümü iş daha effcient ve hızlı,böylece hile android kullanın. Şimdi içeride hikayenin liste görünümü bağlıyordum görüntü gördüğünüz gibi başlangıçta liste görünümü vardır 7 görünür öğeler, eğer kaydırma yaparken Madde 1 değil daha fazla görünür getView() geçmesi bu görüşü(öğe1) geri ve kullanabilirsiniz

System.out.println("getview:" position " " convertView);

senin içinde

public View getView(final int position, View convertView, ViewGroup parent)
{
    System.out.println("getview:" position " " convertView);
    View row=convertView;
    if(row==null)
    {
        LayoutInflater inflater=((Activity)context).getLayoutInflater();
        row=inflater.inflate(layoutResourceId, parent,false);

        holder=new PakistaniDrama();
        holder.tvDramaName=(TextView)row.findViewById(R.id.dramaName);
        holder.cbCheck=(CheckBox)row.findViewById(R.id.checkBox);

        row.setTag(holder);

    }
    else
    {
        holder=(PakistaniDrama)row.getTag();
    }
            holder.tvDramaName.setText(dramaList.get(position).getDramaName());
    holder.cbCheck.setChecked(checks.get(position));
            return row;
    }

sen-ecek duyuru senin logcat başlangıçta convertview null için tüm satırlar görünür, çünkü başlangıçta yoktu görünümü(madde) geri, bu yüzden getView() oluşturur, her bir yeni görünüm için görünür öğeler, o an, kaydırma Madde 1 olacaktır göndermeGeribununla devlet(örneğin TextView eğer checkbox da geri görünüm ve deposu ile ilişkili olacaktır işaretli ise ve benim durumumda olduğu gibi metin). Şimdi liste görünümü yeni bir görünüm oluşturmak için gitmiyor Yukarı/Aşağı kaydır, zaten geri olan(convert) görünümü, sizin içinde kullanırLogcatgöreceksiniz convertView boş değil, çünkü yeni Madde 8 çekilecek kullanarak convertview, yani, temelde al öğe1 görünümden geri dönüşüme ve inflater yer Madde 8 ve gözlemlemek gibi benim kod varsa checkbox ve eğer kontrol konumunda 0(diyelim öğe1 da checkbox ve kontrol) EE, sen ne zaman aşağı doğru ilerleyin göreceksiniz Madde 8 onay kutusunun zaten işaretli, bu liste görünümü yeniden performansın nedeniyle aynı görüşü senin için yeni değil, oluşturma ve kullanma.

Önemli şeyler

1. Hiç set layout_height layout_width sizin için liste görünümü wrap_content getView() güç adaptörü için bir çocuk için ölçüm yüksekliği görüşlerini çizilmesini liste ve neden bazı beklenmeyen davranış gibi dönen convertview bile liste değildir kaydırılan.her zaman match_parent genişlik/yükseklik kullanın.

2. Eğer kullanmak istediğiniz bazı Düzen veya Görünüm sonra liste görünümü ve soru geldi belki senin miyim set layout_height fill_parent görünüm liste görünümü değil göstermek gibi oluyor ekran, çok daha iyi koymak senin liste görünümü içinde bir düzen.Örneğin Lineer Düzeni gereği olarak bu düzen genişliği ve yüksekliği ayarlayın ve yapınyükseklikvegenişliklayout(düzen genişliği ise gibi . senin için liste görünümü özniteliği ^strong>320ve yüksekliğidir280)sonra liste görünümü aynı olmalıyükseklikvegenişlik. Bu söyleyeceğim getView() tam yükseklik ve genişlik manzarası işlenebilecek ve getView() yaramaz tekrar ve tekrar rastgele bir satır, ve diğer sorunlar gibi dönen dönüştürmek manzara daha önce kaydırma olmayacak, ben bu testi kendim, tabii benim liste görünümü vardı içinde lineaLayout oldu da sorunları var gibi tekrar arayın görüntülemek ve dönüştürmek görünümü, Liste Görünümü içine koyarak LinearLayout çalışmış gibi büyü benim için.(neden bilmem)

01-01 14:49:36.606: I/System.out(13871): getview 0 null
01-01 14:49:36.636: I/System.out(13871): getview 0 android.widget.RelativeLayout@406082c0
01-01 14:49:36.636: I/System.out(13871): getview 1 android.widget.RelativeLayout@406082c0
01-01 14:49:36.646: I/System.out(13871): getview 2 android.widget.RelativeLayout@406082c0
01-01 14:49:36.646: I/System.out(13871): getview 3 android.widget.RelativeLayout@406082c0
01-01 14:49:36.656: I/System.out(13871): getview 4 android.widget.RelativeLayout@406082c0
01-01 14:49:36.666: I/System.out(13871): getview 5 android.widget.RelativeLayout@406082c0
01-01 14:49:36.666: I/System.out(13871): getview 0 android.widget.RelativeLayout@406082c0
01-01 14:49:36.696: I/System.out(13871): getview 0 android.widget.RelativeLayout@406082c0
01-01 14:49:36.706: I/System.out(13871): getview 1 null
01-01 14:49:36.736: I/System.out(13871): getview 2 null
01-01 14:49:36.756: I/System.out(13871): getview 3 null
01-01 14:49:36.776: I/System.out(13871): getview 4 null

Ama şimdi çözdüm, biliyorum, değilim de açıklayan ama ben koydum, benim bütün gün anlar diye düşündüm ve diğer yeni başlayanlar, benim gibi yardım dışı deneyimim ve umarım artık insanlar biraz anlayışListe görünümüçok dağınık ve yeni başlayanlar çok zor gibi çalışır, nasıl çerçeve çok fazla sorun anlayış bulundu

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Damien Walters

    Damien Walte

    20 AĞUSTOS 2006
  • Plugable

    Plugable

    19 Mayıs 2010
  • Watcher3223

    Watcher3223

    15 Kasım 2007