ListView พื้นหลังจะกลายเป็นสีดำเมื่อเลื่อน


427

ฉันได้สร้างรายการเฉพาะซึ่งมีองค์ประกอบดังต่อไปนี้เพื่อสร้างรายการที่เลื่อนได้ที่มีทุกแถวที่มีรูปภาพทางด้านซ้ายและข้อความทางด้านขวา:

วิธีเริ่มต้นด้วยเค้าโครง "root":

<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); จากเลย์เอาต์ฉันไม่สามารถตั้งค่าสีได้ แต่ฉันจัดการเพื่อทำด้วยรหัสข้างต้น ฉันใช้รหัสนี้ใน 'onCreate' ของกิจกรรมรายการ หวังว่าข้อมูลนี้จะช่วยได้เช่นกัน
Dijo David

70
android:cacheColorHint="#0000"ใช้ได้ถ้าคุณกลัวเลขศูนย์
Andrew

136
หรือยังandroid:cacheColorHint="@android:color/transparent"ถ้าคุณกลัวของตัวเลข :)
dule

2
@android: color / transparent อาจมีโบนัสเพิ่มจากการมีหนึ่งบิตชุดเดียว มีข้อผิดพลาดที่ถ้าคุณส่ง 0 ในโทรศัพท์โปร่งใสบางอย่างจะไม่ทำงาน ดังนั้นเคล็ดลับคือการตั้งค่า 1 บิต
โทมัส Dignan

63

มันง่ายมากเพียงใช้บรรทัดนี้ในไฟล์เลย์เอาต์ของคุณ:

android:scrollingCache="false"

แบบนี้:

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

2
มันใช้งานได้ แต่ฉันไม่คิดว่ามันฉลาดที่จะทำ: stackoverflow.com/questions/15570041/scrollingcache
Morten Holmgaard

1
ฉันมีกรณีที่ android: cacheColorHint = "# 00000000" ไม่ทำงาน แต่ android: scrollingCache = "false" ขอบคุณ
Yar


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วิธีการสำหรับพื้นหลังสีทึบเนื่องจากจะปิดวิธีการปรับให้เหมาะสมที่ใช้สำหรับการสร้างภาพเคลื่อนไหวและการเลื่อน ListView อย่างราบรื่น

หมายเหตุสำหรับหมายเหตุ: scrolingCacheตั้งค่าเป็นเท็จไม่ได้แปลว่าListViewภาพเคลื่อนไหวและการเลื่อนจะช้าลง




โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.