我有一个标签式布局和一个使用标签作为视图的活动。它有三个标签ListViews
。如果其中一个列表为空,我想显示一个简单的TextView
。我已经浏览了很多帖子,但所有帖子都在ListView
内讨论了一个LinearLayout
。由于多个ListViews
或FrameLayout
,我不确定它是否无效。我们不能在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>
答案 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.GONE
到ViewStub
,如果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" />