在数据加载之前,ListView会短暂地显示空的消息

我已经使用以下自定义布局创build了一个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 ,它的布局包含一个带有特殊标识android:listListView和一个带有特殊标识android:emptyTextView ,正如这里所解释的。

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

Solutions Collecting From Web of "在数据加载之前,ListView会短暂地显示空的消息"

提供的答案是正确的。 我确实必须将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); } 

另外,没有必要再次使空视图可见:这是由框架自动完成的。

如何将以下内容添加到TextView?

 android:visibility="invisible" 

到XML布局文件,然后使TextView可见(如果需要)。

您将不得不将TextView 可见性设置为不可见 ,并且只有在您加载了数据(即onLoadComplete setEmptyView(textView) ,才需要通过setEmptyView(textView)将其设置为ListView的空视图。

如果以XML格式执行此操作,或者在加载结果之前执行该操作,则会显示该视图,因为该列表实际上是空的。 所以你必须等到结果被加载来设置空视图。