如何避免ListView在加载数据之前闪烁@android:id/empty设置的视图。
我正在从sqlite数据库加载数据以填充listview。但是,当应用程序运行时,它会显示与空视图(@android:id/empty)关联的视图,然后被列表视图中的数据替换。有没有办法避免这种情况如何避免ListView在加载数据之前闪烁@android:id/empty设置的视图。,android,listview,Android,Listview,我正在从sqlite数据库加载数据以填充listview。但是,当应用程序运行时,它会显示与空视图(@android:id/empty)关联的视图,然后被列表视图中的数据替换。有没有办法避免这种情况 <ListView android:id="@android:id/list" android:layout_width="wrap_content" android:layout_height="wrap_content" android:animat
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:divider="@drawable/top_drop_shadow"
android:dividerHeight="5dp"
android:padding="5dp" >
</ListView>
<TextView
android:id="@android:id/empty"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:textAlignment="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:drawableBottom="@drawable/read_book"
android:text="Nothing to read here, go read a book instead"
android:textSize="20sp"
android:textStyle="bold" >
</TextView>
为了避免这种行为,请仅在加载数据并更新适配器后提供空视图。仅用一个代码示例来扩展Simon的答案,覆盖myCursorAdapter
的isEmpty()
非常适合我:
@Override
public boolean isEmpty() {
if (getCursor() == null) {
return false; // Data not yet loaded, so don't show empty view
}
else {
return super.isEmpty(); // Data loaded, so show empty view if required
}
}
使用此解决方案,我不需要更改布局文件,但为了完整起见:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@android:color/transparent"
android:dividerHeight="@dimen/activity_vertical_margin" >
</ListView>
<TextView android:id="@id/android:empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="No data"/>
</FrameLayout>
注意-在我的Java代码中,我没有调用
getListView().setEmptyView()
或类似的东西,因此我所有的布局代码都保留在布局文件中。:) 谢谢,但是如果您看到我使用的是默认ID,那么我不会使用空视图到列表的显式赋值。这是否意味着我需要定义自定义ID并在代码中手动分配?是的,您可以这样做。或者您可以创建一个自定义适配器,并重写isEmpty()
方法。只要没有更新数据,就返回false
,在我重构代码但仍然得到错误后返回super.isEmpty()
`View emptyLv=rootView.findviewbyd(R.id.feedlist\u empty);FeedListAdapter FeedListAdapter=新的FeedListAdapter(getActivity().getApplicationContext(),R.layout.feed_项,项);lv.setAdapter(feedListAdapter);lv.setEmptyView(emptyLv);`包括每次销毁片段时尝试重置空视图`@Override public void onDestroy(){super.onDestroy();lv.setEmptyView(null);}`