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