我使用以下自定义布局创建了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:list
,TextView
具有特殊ID android:empty
,正如here所述。
设置android:visibility="invisible"
不会影响可见性。我怀疑这是因为它被设置为内部可见。
答案 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 中执行此操作,或者在加载结果之前执行此操作,则视图将显示,因为列表实际上是空的。所以你必须等到加载结果才能设置空视图。