स्क्रॉल करते समय पृष्ठभूमि सूची दृश्य काला हो जाता है


427

मैंने एक विशिष्ट सूची बनाई है जो निम्नलिखित तत्वों में से एक स्क्रॉल करने योग्य सूची बनाने के लिए मौजूद है जिसमें बाईं ओर एक छवि है और दाईं ओर कुछ पाठ है:

"रूट" लेआउट के साथ शुरू करने के लिए:

<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>

और फिर ListView के भीतर मैं निम्नलिखित "पंक्ति" आइटम रखता हूं:

<?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>

जब तक स्क्रीन को स्टेटिकली (नो मूवमेंट में) दिखाया जाता है, तब तक इसे सही तरीके से दिखाया जाएगा, लेकिन जब मैं सूची के माध्यम से स्क्रॉल करना शुरू करूंगा तो पंक्ति-मद की पृष्ठभूमि (एक "आइकन" जैसा कि कोड में दिखाया जा सकता है) होगा सही ढंग से दिखाया गया है लेकिन "रूट" लेआउट की पृष्ठभूमि पूरी तरह से काली हो जाएगी ... जब स्क्रॉलिंग पृष्ठभूमि को रोक देगी, तो अधिकांश समय, अपना रंग वापस ले लेंगे ... जैसा कि मैंने परीक्षण किया है कि मैंने TextViewउस रूट-तत्व में एक जोड़ा एक ही पृष्ठभूमि के साथ, यह एक रंग होगा जब सूची स्क्रॉल की जाती है ... किसी भी विचार यह क्यों हो रहा है, और इसे कैसे हल किया जाए?

जवाबों:


771

ListViewटैग पर एक विशेषता जोड़ें

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

अधिक जानकारी के लिए इस ब्लॉग की जाँच करें


23
। this.getListView () setCacheColorHint (0); लेआउट से मैं रंग सेट नहीं कर सका। लेकिन मैं इसे उपरोक्त कोड के साथ करने में कामयाब रहा। मैंने सूची गतिविधि के 'ऑनक्रिएट' में इस कोड का उपयोग किया है। आशा है कि यह जानकारी भी मदद करती है।
दीजो डेविड

70
android:cacheColorHint="#0000"अगर आप शून्य से डरते हैं तो भी काम करता है।
एंड्रयू

136
या फिर android:cacheColorHint="@android:color/transparent"अगर आप संख्याओं से डरते हैं :)
dule

2
@android: रंग / पारदर्शी शायद एक एकल बिट सेट होने का जोड़ा बोनस है। एक बग है जहां आप कुछ फोन पर 0 पास करते हैं तो पारदर्शिता नहीं होगी। तो ट्रिक 1 बिट सेट करने की है।
थॉमस डिगन

63

यह बहुत सरल है बस अपनी लेआउट फ़ाइल में इस लाइन का उपयोग करें:

android:scrollingCache="false"

इस तरह:

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

2
यह काम करता है, लेकिन मुझे नहीं लगता कि यह करने के लिए स्मार्ट है: stackoverflow.com/questions/15570041/scrollingcache
मोर्टेन होल्मगार्ड

1
मेरे पास एक ऐसा मामला था जिसमें Android: cacheColorHint = "# 00000000" काम नहीं करता था, लेकिन Android: ScrollCache = "false" ने किया। धन्यवाद।
यार

27

आप इस तरह का उपयोग कर सकते हैं:

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

इस समस्या के लिए हमारे पास बहुत सारे विकल्प हैं, आप पृष्ठभूमि को पारदर्शी जैसे प्रोग्रामिंग के माध्यम से सेट कर सकते हैं

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

या xml के माध्यम से

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


5

मैं छवियों का उपयोग कर रहा हूं listViewऔर यह सैमसंग में कभी-कभी काला हो जाता है s4 स्क्रॉलिंग भी नहीं। यह एक बेवकूफ गलती थी जो मैंने एडॉप्टर में की है। मैंने इस मुद्दे को ठीक करने के लिए अपना विचार शून्य कर दिया है

 @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

इस सवाल के जवाब आवंटित हैं, लेकिन आज मुझे एहसास हुआ कि यह सवाल अभी भी जानकारी का एक महत्वपूर्ण टुकड़ा गायब है।

कर रहे हैं दो संभव समाधान समस्या के लिए, दोनों काम लेकिन प्रत्येक विभिन्न स्थितियों में इस्तेमाल किया जाना चाहिए।


तरीके

android:cacheColorHintजब आपके ListViewपास ठोस रंग की पृष्ठभूमि हो तो उपयोग करें ।

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

android:scrollingCacheजब आपकी ListView(जटिल) छवि पृष्ठभूमि के रूप में उपयोग करें ।

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

ध्यान दें

जब आपके ListViewपास एक ठोस रंग पृष्ठभूमि होती है, तो दोनों विधियां काम करेंगी, इसलिए न केवल cacheColorHintइच्छा काम करेगी। लेकिन यह scrolingCacheठोस रंग पृष्ठभूमि के लिए विधि का उपयोग करने के लिए अनुशंसित नहीं है क्योंकि यह चिकनी एनिमेशन और सूची दृश्य स्क्रॉल करने के लिए उपयोग की जाने वाली अनुकूलन विधि को बंद कर देता है।

नोट के लिए ध्यान दें: scrolingCache गलत पर सेट का मतलब जरूरी नहीं है कि ListViewएनिमेशन और स्क्रॉलिंग धीमी हो जाएगी।




हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.