0

我有一个选项卡式布局和一个使用选项卡作为视图的活动。它具有三个选项卡作为ListViews. 如果其中一个列表为空,我想显示一个简单的TextView。我浏览过很多帖子,但所有帖子都在谈论ListView一个LinearLayout. 我不确定它是否因为多个ListViewsor而不工作FrameLayout。我们不能在 a中设置visibility = GONEFrameLayout吗?因为即使那样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
        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  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

4 回答 4

3

只需调用setEmptyView(...)您的ListView,传入TextViewas 参数即可。

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

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

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

附带说明:您可能必须将每个ListView实例TextView作为空视图提供给每个实例,以避免发生冲突的场景;例如,当一个列表确实有内容,而另一个没有。

于 2012-07-13T02:51:22.540 回答
1

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

于 2012-07-13T04:25:04.260 回答
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 替换为自定义适配器。当列表为空时,您还可以使用不同的适配器。

于 2012-07-20T01:00:50.797 回答
0

您是否尝试过在您的 java 代码中为每个 ListView 设置 Visibility?

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  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" />
于 2012-07-13T02:55:54.227 回答