ListView在加载数据之前短暂显示空消息

时间:2013-01-02 15:11:23

标签: android android-listfragment

我使用以下自定义布局创建了ListFragment,添加TextView以在列表为空时显示消息:

<?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:id="@id/android:list"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:drawSelectorOnTop="false"/>

  <TextView android:id="@id/android:empty"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="@string/vsl_empty"
            android:gravity="center"
            android:layout_gravity="center"
            android:textColor="#8C8C8C" />
</LinearLayout>

使用派生自CursorAdapter的自定义适配器加载数据。当数据库中有数据时,列表会非常简短地显示空列表消息,直到加载数据为止,此时列表将被填充。

如何阻止空列表消息短暂显示,因为列表尚未填充?

更新

我想强调的是,我使用的ListFragment布局包含ListView,其特殊ID为android:listTextView具有特殊ID android:empty,正如here所述。

设置android:visibility="invisible"不会影响可见性。我怀疑这是因为它被设置为内部可见。

3 个答案:

答案 0 :(得分:8)

提供的答案在正确的轨道上。我确实必须将TextView设置为不可见,但正确的位置位于onCreateLoader

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args)
{
  mListView.getEmptyView().setVisibility(ListView.GONE);

  return new CursorLoader(getActivity(), CONTENT_URI, null, null, null, null);
}

此外,没有必要再次显示空视图:这是由框架自动完成的。

答案 1 :(得分:1)

如何将以下内容添加到TextView

android:visibility="invisible"

到XML布局文件,然后在需要时使TextView可见。

答案 2 :(得分:-1)

您必须将TextView 可见性设置为不可见,并且只有在您加载数据后才会设置 - onLoadComplete - - 您必须通过执行ListView将其设置为setEmptyView(textView)的空视图;

如果您在 XML 中执行此操作,或者在加载结果之前执行此操作,则视图将显示,因为列表实际上是空的。所以你必须等到加载结果才能设置空视图。