在FrameLayout中为空ListView显示TextView

时间:2012-07-13 02:16:12

标签: android android-listview

我有一个标签式布局和一个使用标签作为视图的活动。它有三个标签ListViews。如果其中一个列表为空,我想显示一个简单的TextView。我已经浏览了很多帖子,但所有帖子都在ListView内讨论了一个LinearLayout。由于多个ListViewsFrameLayout,我不确定它是否无效。我们不能在FrameLayout内设置 visibility = GONE 吗?因为即便如此,TextView也始终与ListView一起显示。任何人都可以建议在这种情况下可以做些什么?

我还尝试将TextView包含在另一个xml文件中。但我不确定如何将TextView添加到FrameLayout

这就是我正在为所有三个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>

4 个答案:

答案 0 :(得分:3)

只需拨打ListView上的setEmptyView(...),然后传递TextView作为参数。

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

ListView应自动处理切换“空”视图的可见性。

提示:由于参数是通用View,因此您可以传入View的任何子类,或更复杂的视图层次结构。

旁注:您可能必须将每个ListView自己的TextView实例作为空视图,以避免冲突情况;例如当一个列表确实有内容时,而另一个列表没有内容。

答案 1 :(得分:1)

我会坚持要在这里使用ViewStub并在FrameLayout中使用ListView。当ListView有数据时,您可以使用VIEW.GONEViewStub,如果ListView没有数据,则使用VIEW.VISIBLE作为ViewStub。您可以从github下载示例并使其正常运行。

答案 2 :(得分:1)

您可以通过在列表为空时添加空项来解决此问题。以下示例基于您的EDIT前编码:

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替换为自定义适配器。当列表为空时,您还可以使用其他适配器。

答案 3 :(得分: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" />