2012-07-13 69 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