簡體   English   中英

在Android中的ListView中滾動時獲取黑屏

[英]Getting Black Screen while Scrolling in ListView in Android

我有一個listview,我在其中顯示我得到的數據,它在模擬器中運行良好並滾動。 但是當我在滾動時在設備上測試它時顯示黑屏,滾動停止后它是正常的可讀形式。 我不知道為什么會這樣。 我還附上了示例代碼。

第一個XML布局: -

<?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="fill_parent"
    android:orientation="vertical"
    android:padding="7dp" >

<TextView
    android:id="@+id/item_title"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="2dp"
    android:textColor="#000000"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textSize="20dp" />

<TextView
    android:id="@+id/item_subtitle"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#000000"
    android:padding="2dp"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textSize="13dp" />

第二個ListView布局: - 它也有滾動視圖。

<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="#FFFFFF">   

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:drawSelectorOnTop="false" />

<TextView
    android:id="@android:id/empty"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="No data"
    android:textColor="#000000" />

我使用過此布局的代碼: -

ListAdapter adapter = new SimpleAdapter(this, HomeMenuActivity.mylist , R.layout.listdata, 
            new String[] { "Name", "Vicinity" }, 
            new int[] { R.id.item_title, R.id.item_subtitle });

    setListAdapter(adapter);

    lv = getListView();
    lv.setTextFilterEnabled(true);

我有靜態arraylist“mylist”,它有數據。 如果有人知道為什么它在滾動時顯示黑屏請指導我。

謝謝lv.setOnItemClickListener(this);

我完全同意上面列出的所有答案,但是讓我告訴你這些信息:

默認情況下,ListView具有透明/半透明背景,因此Android UI工具包中的所有默認小部件都是如此。 這意味着當ListView重繪其子項時,它必須將子項與窗口的背景混合。 再一次,這需要從內存中進行昂貴的回讀,這在滾動或拖動期間特別痛苦,因為每秒進行數十次繪制。

為了提高滾動操作期間的繪圖性能,Android框架重用了緩存顏色提示。 設置此提示后,框架會在填充了提示值的位圖中復制列表的每個子項(假設另一個優化,稱為滾動緩存,未關閉)。 然后ListView直接在屏幕上顯示這些位圖,因為已知這些位圖是不透明的,所以不需要混合。 此外,由於默認緩存顏色提示為#191919,因此在滾動期間每個項目后面都會顯示深色背景。

要解決此問題,您所要做的就是禁用緩存顏色提示優化,如果使用非純色背景,或將提示設置為適當的純色值。 您可以使用android:cacheColorHint屬性從代碼(請參閱setCacheColorHint(int) )或最好從XML執行此操作。 要禁用優化,只需使用透明色#00000000。 以下屏幕截圖顯示了在XML布局文件中設置android:cacheColorHint="#00000000"的列表

有關更多信息: Android ListView優化

解:

您可以使用android:cacheColorHint="@android:color/transparent"android:cacheColorHint="#00000000"

你必須在listview中設置它:

android:cacheColorHint="#00000000"

目標是禁用框架在滾動操作期間為提高繪圖性能所做的優化。

嘗試此代碼並根據您的要求設置顏色:

String arr[]=new String[]{"a","bv"};
ListView lv;    

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    lv=(ListView)findViewById(R.id.lv1);
    ArrayAdapterad=newArrayAdapter(getApplicationContext(),R.layout.check_it,R.id.txt_color,ar);
    lv.setAdapter(ad);
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
<ListView
    android:layout_width="match_parent"
    android:layout_height="250dp"
    android:id="@+id/lv1"
    android:background="#000"
    android:scrollingCache="false"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#fff"
    android:id="@+id/txt_color"/>

只需將顏色提示屬性添加到列表視圖即可。

            <ListView android:layout_height="wrap_content"
                android:layout_width="match_parent" android:cacheColorHint="@android:color/transparent" />

在布局中的listview標記中添加一個屬性

android:cacheColorHint="#00000000"

之后它應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM