3

工作,我有一個ListFragment,我想設置其空視圖,所以我用下面的代碼:setEmptyView()似乎並不爲(福爾摩斯)ListFragment

View emptyView = getLayoutInflater().inflate(R.layout.collection_empty_view, null); 
detailFragment.getListView().setEmptyView(emptyView); 

以下XML佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/empty" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/tv_empty" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:text="@string/empty_collection" /> 

    <Button 
     android:id="@+id/btn_add_legislation" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="addText" 
     android:text="@string/action_add_text" /> 

</LinearLayout> 

但沒有任何顯示!

我試過detailFragment.getListView().setEmptyText(),那沒做工作!我在做錯了嗎?

回答

7

空視圖必須與列表視圖位於同一視圖層次結構中。以這種方式膨脹將無法工作。

一般來說,我在下面的格式創建佈局:

<Layout> 
    <ListView/> 
    <View android:id="@+id/empty"/> 
</Layout> 

其中空的觀點是我想爲我的「空視圖」使用視圖。然後在創建我得到一個空視圖的引用,並與該引用調用setEmptyView()。

下面是來自Android文檔的例子(檢查出的documentation,它應該是適用於SherlockListFragment):

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingLeft="8dp" 
     android:paddingRight="8dp"> 

    <ListView android:id="@id/android:list" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="#00FF00" 
       android:layout_weight="1" 
       android:drawSelectorOnTop="false"/> 

    <TextView android:id="@id/android:empty" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="#FF0000" 
       android:text="No data"/> 
</LinearLayout> 
+1

很好用!我唯一想補充的是,如果你仍然想使用'ListFragment',那麼列表ID應該是'android.R.id.list'。 – Maarten

+0

太棒了,很高興它爲你工作。 – Flynn81

1

你可以嘗試一些東西,我做我的應用程序的一個片段。 我不知道這是否是一個好的做法,但它的工作原理!

View emptyView = getActivity().getLayoutInflater().inflate(R.layout.empty, null); 
getActivity().setContentView(emptyView);