android - شرح - setonitemclicklistener




يصبح ListView خلفية سوداء عند التمرير (8)

لقد قمت بإنشاء قائمة محددة موجودة خارج العناصر التالية لإنشاء قائمة قابلة للتمرير مع كل صف يحتوي على صورة على الجانب الأيسر وبعض النص على الجانب الأيمن:

للبدء بتخطيط "الجذر":

<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 أضع عنصر "row" التالي:

<?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 في هذا الجذر - عنصر مع نفس الخلفية ، هذا واحد سيحتجز لونه عندما يتم تمرير القائمة ... أي فكرة لماذا يحدث هذا ، وكيفية حل هذا؟


أنا أستخدم الصور في 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);
             } 
        }

إضافة سمة على ListView العلامة

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

لمزيد من التفاصيل تحقق من هذا بلوق


في xml الخاص بك حيث لاستخدام مجموعة Listview

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

لدينا الكثير من الخيارات لهذه المشكلة ، يمكنك تعيين الخلفية كشفافة من خلال البرمجة مثل

yourlistview.setCacheColorHint(Color.TRANSPARENT); 

أو من خلال xml

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

هناك الكثير من الإجابات على هذا السؤال ، لكنني أدركت اليوم أن هذا السؤال لا يزال يفتقد إلى جزء هام من المعلومات.

هناك حلان ممكنان للمشكلة ، كلاهما يعمل ولكن يجب استخدام كل منهما في حالات مختلفة.

أساليب

استخدم android:cacheColorHint عندما يحتوي ListView على خلفية بلون خالص .

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

استخدم android:scrollingCache عندما يحتوي ListView على صورة (معقدة) كخلفية.

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

ملحوظة

عندما يحتوي ListView الخاص بك على خلفية لون خالص ستعمل كلتا الطريقتين ، بحيث تعمل فقط cacheColorHint . ولكن لا ينصح باستخدام أسلوب scrolingCache ذات الألوان الصلبة حيث يقوم بإيقاف scrolingCache أسلوب scrolingCache يستخدم scrolingCache السلس والتمرير في ListView.

ملاحظة للملاحظة: لا يعني بالضرورة تعيين scrolingCache إلى false scrolingCache ListView والتمرير تصبح بطيئة.


يمكنك استخدام مثل هذا:

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

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

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




listview