listfragment暂时显示空视图

时间:2014-10-25 11:58:08

标签: android

当我启动我的应用程序时,以列表片段开头,在显示列表视图之前,空视图显示不到一秒钟。我猜这是因为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>

2 个答案:

答案 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);
    ...
}

修改

在考虑之后,你有几个选择:

  1. 停止使用ListFragment,它会自动设置空视图
  2. 使用getListView().setEmptyView(null)删除空视图,然后重新充气(重新创建)并重新设置getListView().setEmptyView(newEmptyView)
  3. 当活动第一次膨胀(onCreateView())时,使用一个空项目为其设置一个虚拟适配器,因此ListView不认为它是空的。然后你的加载器将交换光标并使用真实数据,无论是否为空。
  4. 我个人最喜欢第三个想法,并且可能会在我自己的项目中实现它,因为目前我正在使用解决方案No.1。

答案 1 :(得分:0)

在onCreateView方法中,您需要设置listview对象的空视图。例如

mListView.setEmptyView(view.findViewById(android.R.id.empty));

确保在设置空视图的文本之前完成此操作。