当我启动我的应用程序时,以列表片段开头,在显示列表视图之前,空视图显示不到一秒钟。我猜这是因为cursorLoader
完成从本地sqlite数据库填充适配器所需的时间。是否有解决方法,以便每次打开应用程序时,空视图都不会显示几微秒?
这是片段的布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/very_light_grey"
>
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"
android:choiceMode="singleChoice"
android:divider="@null"
android:dividerHeight="8dp"
android:focusable="false"
android:focusableInTouchMode="false" />
<TextView
android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:text="nothing yet"
android:textColor="@color/grey"
android:textSize="30sp" />
</FrameLayout>
答案 0 :(得分:0)
隐藏TextView,然后在加载程序完成后显示它。
XML:
<TextView
android:id="@android:id/empty"
android:visibility="invisible"
.../>
代码:
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
findViewById(R.id.empty).setVisibility(View.VISIBLE);
...
}
修改强>
在考虑之后,你有几个选择:
getListView().setEmptyView(null)
删除空视图,然后重新充气(重新创建)并重新设置getListView().setEmptyView(newEmptyView)
。onCreateView()
)时,使用一个空项目为其设置一个虚拟适配器,因此ListView
不认为它是空的。然后你的加载器将交换光标并使用真实数据,无论是否为空。我个人最喜欢第三个想法,并且可能会在我自己的项目中实现它,因为目前我正在使用解决方案No.1。
答案 1 :(得分:0)
在onCreateView方法中,您需要设置listview对象的空视图。例如
mListView.setEmptyView(view.findViewById(android.R.id.empty));
确保在设置空视图的文本之前完成此操作。