我有一个列表视图,这是我活动的主要部分。当listview中没有对象时,我想用一个有用的消息(TextView)替换它。如果列表在onResume中未填充,我只需再次调用setContentView。
但是,这仅适用于TextView。如果我拨打setContentView(R.layout.mylayout)
,那么我会收到空白。在用户创建了一个能够在另一个活动中正确进入列表视图并返回的项目之后,这尤其令人烦恼。
我有正确的方法吗?我该如何解决这个问题?
谢谢!
答案 0 :(得分:3)
ListView有一个名为 setEmptyView(View)的方法,通过该方法,您可以在列表为空时显示任何视图。 ListView负责隐藏/显示视图。
TextView emptyView = (TextView)findViewById(R.id.empty_list_view);
placesList.setEmptyView(emptyView);
布局代码与Blrfl的代码相同。
答案 1 :(得分:1)
那么,你的列表视图中有什么?如果您只有文本,那么您可以输入您的消息作为列表视图的第一部分,除非添加了某些内容。就像你有一个使用listview打印的字符串数组一样,尝试将第一个数组作为你的消息,除非有人添加其他内容。
答案 2 :(得分:1)
您可以尝试使用setVisibility尝试更改每个视图的可见性标记,而不是使用setContentView。如果未填充列表,则可以将其可见性更改为View.GONE,并使用View.VISIBLE使帮助器TextView可见,如果填充了ListView,则执行相反的操作。不确定这是否正是您正在寻找的,但值得一试。
答案 3 :(得分:1)
我已将此作为评论添加到BenV的答案中,但我无法粘贴代码。这是我如何进行布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
/>
<TextView android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="@string/list_empty"
/>
</LinearLayout>
在notifyDataSetChanged()
上致电ArrayAdapter
之前,如果有项目,我会分别在setVisibility(View.VISIBLE)
和setVisibility(View.GONE)
上list
和empty
在列表中,如果列表为空则反向。