在ListView中显示“No Item”消息
我在我的android应用程序中创build了一些组合用户界面,并且在视图内部还有一些ListView控件 – 其他控件。 正因为如此,我使用“活动”作为我的活动基类。
现在我需要显示一个简单的消息,如“没有项目”,当绑定到我的适配器的ListView是空的。 我知道这是可能的使用ListActivity时,但我不知道什么是最好的办法呢?
你正在寻找一个ListActivity的空视图:
http://developer.android.com/reference/android/app/ListActivity.html
如果您使用ListView,则可以使用setEmptyView()方法:
没有ListActivity
你可以有一个空的视图! 正确的方法如下
首先在您的列表下面的布局XML中添加一个“空视图”
... <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <TextView android:id="@+id/empty" android:text="Empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" /> ...
接下来,重写您的活动的onContentChanged
方法,并将列表的空视图设置为空视图:
@Override public void onContentChanged() { super.onContentChanged(); View empty = findViewById(R.id.empty); ListView list = (ListView) findViewById(R.id.list); list.setEmptyView(empty); }
而已! 当您更新适配器时,Android将负责隐藏/显示列表和空视图。
魔术
确定是否显示空的视图是由ListView
的超类, AdapterView
。 AdapterView
在设置的适配器上注册DataSetObserver
,以便在数据更改时通知它。 这触发了AdapterView
中包含以下行的AdapterView
调用
if (mEmptyView != null) { updateEmptyStatus((adapter == null) || adapter.isEmpty()); }
并根据适配器是否为空来设置空视图可见性。
只要将你的ListView
和TextView
结合起来:
<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="@+id/list" android:layout_height="fill_parent" android:layout_width="fill_parent" /> <TextView android:id="@+id/list_empty" android:text="No Item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> </LinearLayout>
然后检查ListView
相应项目的可见性计数:
ListView lv = (ListView)findViewById(R.id.list); lv.setVisibility((adapter.isEmpty())?View.GONE:View.VISIBLE);
如果使用自定义适配器,则可以在重写的notifyDataSetChanged
方法中执行此notifyDataSetChanged
。
你可以使用吐司消息这个..
通过adapter.getCount()
检查适配器的计数值
if(Adapter.getCount()!=0){ List.setAdapter(Adapter); }else{ Toast.makeText(YourActivityName.this, "No Items Available",Toast.LENGTH_SHORT).show(); }
对于Joseph的布局代码,您需要编辑@ + id / list和@ + id / empty到@android:id / * ,如:
<ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <TextView android:id="@android:id/empty" android:text="Empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" />
这样,你甚至不需要重写onContentChanged()函数。
最简单的方法是使用ListFragment而不是ListActivity。 ListFragment具有以下便利方法:
setEmptyText("My no items message...");
另外,使用ListFragment类还有其他的好处。 例如,可以将它与新的AppCompat库结合起来(因为您必须从ActionBarActivity进行扩展,所以您无法使用ListActivity进行操作)。