2012-07-13 71 views
0

我有一個標籤式佈局和一個使用標籤作爲視圖的活動。它有三個標籤ListViews。如果任何一個列表是空的,我想顯示一個簡單的TextView。我經歷了很多帖子,但他們都在談論LinearLayout中的單個ListView。我不確定它是否因多個ListViewsFrameLayout而無法工作。我們能不能設置知名度= GONE裏面的FrameLayout?因爲即使這樣TextView總是與ListView一起顯示。任何人都可以建議在這種情況下可以做什麼?在FrameLayout中顯示空的ListView的TextView

我也試過在其他xml文件中包含TextView。但我不知道如何將TextView添加到我的FrameLayout

這是我在做什麼對M所有三個ListViews

TextView empty = (TextView) findViewById(R.id.blank); 
FrameLayout frameLayout = (FrameLayout) findViewById(android.R.id.tabcontent); 

mListView_top10 = (ListView)findViewById(R.id.Top_10); 
if(TopWR.size()!=0) { 
     mListView_top10.setAdapter(new ArrayAdapter<String>(this, R.layout.listview_row,TopWR)); 
} else { 
    frameLayout.addView(empty); 
} 

的FrameLayout

<FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"   
     android:background="@drawable/innerdashboard_bg" 
     android:layout_weight="1"> 


      <ListView 
      android:id="@+id/Top_10" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:paddingRight="5dp" 
      android:text="this is a tab" /> 


     <ListView 
      android:id="@+id/Billable" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:paddingRight="5dp" 
      android:text="this is another tab" /> 


     <ListView 
      android:id="@+id/Product" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:paddingRight="5dp" 
      android:textSize="14sp" 
      android:text="this is a third tab" /> 

</FrameLayout> 

的TextView

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/blank" 
      android:gravity="center" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="No records Avaible" 
      android:textColor="#ffffff" /> 

編輯

我也嘗試過使用setEmptyView,對於全部三個ListViews使用單獨的空視圖,不起作用!

TextView empty1 = (TextView) findViewById(R.id.blank1); 
mListView_top10 = (ListView)findViewById(R.id.Top_10); 
mListView_top10.setEmptyView(empty1); 
mListView_top10.setAdapter(new ArrayAdapter<String>(this, R.layout.listview_row,TopWR)); 

XML:

<FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/innerdashboard_bg" 
     android:layout_weight="1"> 


     <LinearLayout 
      android:id="@+id/Top_10" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

      <ListView 
      android:id="@+id/Top_10" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:paddingRight="5dp" 
      android:text="this is a tab" /> 

      <TextView 
      android:id="@+id/blank1" 
      android:gravity="center" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="No records Avaible" 
      android:textColor="#ffffff" /> 

     </LinearLayout> 


     <LinearLayout 
      android:id="@+id/Billable" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

     <ListView 
      android:id="@+id/Billable" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:paddingRight="5dp" 
      android:text="this is another tab" /> 

     <TextView 
      android:id="@+id/blank2" 
      android:gravity="center" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="No records Avaible" 
      android:textColor="#ffffff" /> 

     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/Product" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

     <ListView 
      android:id="@+id/Product" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:paddingRight="5dp" 
      android:textSize="14sp" 
      android:text="this is a third tab" /> 

     <TextView 
      android:id="@+id/blank3" 
      android:gravity="center" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="No records Avaible" 
      android:textColor="#ffffff" /> 

     </LinearLayout> 

</FrameLayout> 

回答

3

只需撥打setEmptyView(...)ListView,在TextView傳遞作爲參數。

TextView empty = (TextView) findViewById(R.id.blank); 
mListView_top10.setEmptyView(empty); 

ListView應自動切換「空白」視圖的可見性。

提示:由於參數是一個通用的View,您可以傳入任何子類View或更復雜的視圖層次結構。

附註:您可能必須將每個ListView自己的TextView實例作爲空視圖來避免衝突情況;例如當一個清單確實有內容時,而另一個清單沒有內容。

+0

我試過了。但它不起作用!我想這是因爲我的活動沒有擴展'ListActivity'。 'setEmptyView'只能在'ListActivity'的右邊? – Harsh 2012-07-13 02:54:52

+0

我編輯了我的代碼。請再看一遍。我不斷收到這個'Exception [Ljava.lang.StackTraceElement; @ 4063add0' – Harsh 2012-07-13 04:03:45

0

您是否嘗試過在您的java代碼中設置每個ListView的可見性?

TextView empty = (TextView) findViewById(R.id.blank); 
FrameLayout frameLayout = (FrameLayout) findViewById(android.R.id.tabcontent); 


mListView_top10 = (ListView)findViewById(R.id.Top_10); 
     if(TopWR.size()!=0) { 
      mListView_top10.setVisibility(View.VISIBLE); 
      mListView_top10.setAdapter(new ArrayAdapter<String>(this, 
        R.layout.listview_row,TopWR)); 


     } 
     else { 
      mListView_top10.setVisibility(View.GONE); 
      empty.setVisibility(View.VISIBLE); 
      frameLayout.addView(empty); 

     } 

的TextView

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/blank" 
     android:visibility="gone" 
     android:gravity="center" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="No records Avaible" 
     android:textColor="#ffffff" /> 
+0

是啊!我也試過這個。問題是'TextView'的可見性即使列表不爲空也會顯示 – Harsh 2012-07-13 03:01:28

+0

我用不同的方法編輯了新版本 – frogmanx 2012-07-13 03:07:14

+0

不起作用!我認爲addView導致了一個問題。我收到一個例外。 – Harsh 2012-07-13 03:18:10

1

我會堅持讓你在這裏使用ViewStubListView一個的FrameLayout內。當你的ListView有數據時,你可以使用VIEW.GONEViewStub,如果你的ListView沒有數據,那麼使用VIEW.VISIBLE作爲ViewStub。你可以從github下載例子,並讓它工作。

+0

我是否需要創建另一個類,比如'CheeseAdapter',並將其擴展爲'BaseAdapter'?我的意思是,爲什麼它不工作? – Harsh 2012-07-13 13:40:11

+0

不,因爲您正在使用內置ArrayAdapter,您可以創建一個方法來檢查集合的大小並相應地執行。 – 2012-07-13 13:42:07

+0

我試過了。它沒有工作!我的意思是即使列表不是空的,TextView也是可見的。但是我沒有使用'ViewStub'。這是一個簡單的'TextView'。那是什麼遺漏了嗎? – Harsh 2012-07-13 13:46:42

1

您可以通過在列表爲空時添加空項來解決此問題。下面的例子是基於您的預編輯代碼:

FrameLayout frameLayout = (FrameLayout) findViewById(android.R.id.tabcontent); 

mListView_top10 = (ListView)findViewById(R.id.Top_10); 
if (TopWR.size() == 0) { 
    // add a single item to the array, in order to indicate the list is empty 
    TopWR.add("The List Is Empty"); 
} 
mListView_top10.setAdapter(new ArrayAdapter<String>(this, R.layout.listview_row,TopWR)); 

如果你想用怎樣的空列表會顯示您可以用自定義適配器更換ArrayAdapter票友。列表爲空時,也可以使用不同的適配器。

+0

這是我目前解決的。但是將空列表顯示爲帶有修改文本的列表項目並不是一個好方法。畢竟它看起來像一個列表項目。我想在自己的字體佈局中間顯示一個「TextView」,而不是在頁面左側顯示文本,就好像它是一個真正的列表項。雖然謝謝! – Harsh 2012-07-20 16:27:03