Kaydırma sırasında Arkaplan Listesi Görünümü kararıyor


427

Sol tarafta bir resim ve sağ tarafta bazı metinler içeren her satırla kaydırılabilir bir liste oluşturmak için aşağıdaki öğelerden oluşan belirli bir Liste oluşturdum:

Bir "kök" düzeniyle başlamak için:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="#C8C8C8"
    >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:drawSelectorOnTop="false"
        android:divider="#C8C8C8"
        android:background="#C8C8C8"/>
</LinearLayout>

ve sonra ListView içinde aşağıdaki "satır" öğeyi yerleştirin:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/bg_row"
>
    <ImageView
        android:layout_width="wrap_content"
        android:paddingLeft="10px"
        android:paddingRight="15px"
        android:paddingTop="5px"
        android:paddingBottom="5px"
        android:layout_height="wrap_content"
        android:src="@drawable/bg_image"
    />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="5px"
        android:paddingBottom="5px"
        android:textSize="16sp"
        android:textColor="#000000"
        android:layout_gravity="center"
        android:maxHeight="50px"/>
</LinearLayout>

Ekran statik olarak gösterildiği sürece (hareketsiz olduğu gibi) doğru gösterilecektir, ancak listede ilerlemeye başladığımda satır öğesinin arka planı (kodda gösterilebilecek bir "simge") "kök" düzeninin arka planı tamamen siyah olacak ... kaydırma durduğunda arka plan, çoğu zaman, rengini geri alacak ... Test ettiğimde TextView, o kök öğeye de ekledim aynı arka planla, bu liste kaydırıldığında rengini alıkoyacaktır ... Bunun neden olduğu hakkında herhangi bir fikir ve bunu nasıl çözeceksiniz?

Yanıtlar:


771

Bir özellik ekle ListViewEtiketi

android:cacheColorHint="#00000000" // setting transparent color

Daha fazla ayrıntı için bu blogu kontrol edin


23
. This.getListView () setCacheColorHint (0); Düzenden rengi ayarlayamadım. Ama yukarıdaki kodla yapmayı başardım. Bu kodu 'onCreate' liste etkinliğinde kullandım. Umarım bu bilgi de yardımcı olur.
Dijo David

70
android:cacheColorHint="#0000" sıfırlardan korkuyorsanız da çalışır.
Andrew

136
Veya android:cacheColorHint="@android:color/transparent"sayılardan korkuyorsanız :)
dule

2
@android: renk / saydam muhtemelen tek bir bit setine sahip olma avantajına sahiptir. Bazı telefonlarda 0 geçerseniz şeffaflık çalışmaz. Yani hile 1 bit ayarlamaktır.
Thomas Dignan

63

Bu satırı düzen dosyanızda kullanmanız çok basit:

android:scrollingCache="false"

bunun gibi:

<ListView 
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollingCache="false"
/>

2
Çalışıyor ama yapmanın akıllı olduğunu düşünmüyorum: stackoverflow.com/questions/15570041/scrollingcache
Morten Holmgaard

1
Ben android: cacheColorHint = "# 00000000" işe yaramadı, ancak android: scrollingCache = "false" bir durum vardı. Teşekkürler.
Yar

27

şöyle kullanabilirsiniz:

list.setCacheColorHint(Color.TRANSPARENT);
list.requestFocus(0);

10

android:id="@android:id/list"
android:layout_width="fill_parent" 
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
android:divider="#C8C8C8"
android:background="#C8C8C8"
android:cacheColorHint="#00000000"/>

7

Bu sorun için birçok seçeneğimiz var, programlama yoluyla arka planı saydam olarak ayarlayabilirsiniz.

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

veya xml aracılığıyla

android:cacheColorHint="@android:color/transparent"

5

Xml'nizde Listviewsetin nerede kullanılacağı

    android:cacheColorHint="@android:color/transparent"

5

Görüntüleri kullanıyorum listViewve bazen samsung s4'te siyah bile kaymıyor. Bağdaştırıcıda yaptığım aptalca bir hataydı, sadece bu sorunu gidermek için null değerine ayarladım

 @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            Holder holder;
            convertView = null; // convert view should be null
            if (convertView == null) {
                holder = new Holder();
                convertView = inflater1.inflate(R.layout.listview_draftreport_item, null);
             } 
        }

4

Bu sorunun cevabı bir sürü var ama bugün bu sorunun hala kritik bir bilgi eksik olduğunu fark ettim.

Sorun için iki olası çözüm vardır , her ikisi de çalışır, ancak her biri farklı durumlarda kullanılmalıdır.


Yöntemler

Kullan android:cacheColorHintsenin zaman ListViewbir sahip katı renk arka planı.

<item name="android:cacheColorHint">@android:color/transparent</item>

Kullan android:scrollingCachesenin zaman ListViewbir (karmaşık) sahiptir görüntüyü arka plan olarak.

<item name="android:scrollingCache">false</item>

Not

ListViewDüz renk arka planınız olduğunda, her iki yöntem de çalışır, bu yüzden sadece cacheColorHintçalışır. Ancak scrolingCache, düz renkli arka planlar için yöntemin kullanılması önerilmez, çünkü ListView'i düzgün bir şekilde canlandırmak ve kaydırmak için kullanılan bir optimizasyon yöntemini kapatır.

Not için not: scrolingCache false değerine ayarlanması, ListViewanimasyonlarının ve kaydırma işleminin yavaşlayacağı anlamına gelmez .



2

Aşağıdakiler benim için çalıştı:

myListView.setScrollingCacheEnabled(false);

1

android:cacheColorHint="#00000000"// setting transparent color

veya

yapamaz arka planını ayarlamak listview.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.