10

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。当数据库中有数据时,列表会非常简短地显示空列表消息,直到加载数据,此时列表被填充。

如何防止空列表消息因为列表尚未填充而短暂出现?

更新

我想强调的是,我使用的ListFragmenta 布局包含ListView带有特殊 idandroid:list的 a 和TextView带有特殊 id的 a ,如此android:empty所述。

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

4

3 回答 3

9

提供的答案是正确的。我确实不得不将 设置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);
}

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

于 2013-01-03T08:23:52.153 回答
1

如何将以下内容添加到 TextView

android:visibility="invisible"

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

于 2013-01-02T16:28:12.467 回答
-1

您必须将可见性设置TextView 可见,并且只有在加载数据后——即onLoadComplete——您必须将其设置为ListViewby doing的空视图setEmptyView(textView)

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

于 2013-01-02T18:46:27.057 回答