我正在从sqlite数据库加载数据以填充listview。但是,当应用程序运行时,它会显示与空视图关联的视图(@android:id / empty),然后它将被列表视图中的数据替换。有没有办法避免这种情况。
<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>
答案 0 :(得分:1)
要避免此行为,请仅在加载数据并更新适配器时提供空视图。
答案 1 :(得分:1)
仅仅通过代码示例扩展Simon的回答,覆盖我的CursorAdapter
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()
或类似的东西,所以我的所有布局代码都保留在布局文件中。 :)