我有一个Activity,它包含一个用XML定义的ListView(它不是ListActivity类的子类)。
我想在ListView为空时显示一条消息,所以我尝试使用setEmptyView方法:
listView = (ListView) findViewById(R.id.list);
TextView emptyListText = new TextView(this);
// also tried with the following line uncommented
// emptyListText.setId(android.R.id.empty);
emptyListText.setText(getString(R.string.EmptyList));
listView.setEmptyView(emptyListText);
但它不起作用。
有什么想法吗?
感谢。
答案 0 :(得分:23)
调用setText()
后,您需要在代码中添加以下两行:
emptyListText.setVisibility(View.GONE);
((ViewGroup)listView.getParent()).addView(emptyListText);
如果可见性未设置为GONE(隐藏),则TextView将始终显示为可见。第二行将TextView放入ListView的ViewGroup中 - 在使用声明性XML视图时会自动处理。
答案 1 :(得分:2)
以这种方式试试......
首先是一个简单的activity_main.xml布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<ListView
android:id="@+id/root_list"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<ViewStub
android:id="@+id/root_empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout="@layout/empty_view"
android:visibility="gone" />
</LinearLayout>
并从您的MainActivity.java:
public class MainActivity extends Activity {
ListView mListView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.mListView = (ListView) findViewById(R.id.root_list);
mListView.setEmptyView(findViewById(R.id.root_empty));
mListView.setAdapter(null);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
只要适配器为null或isEmpty返回true,就会出现R.layout.empty_view
中的任何内容。
我将它用于empty_view.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@color/gray"
android:gravity="center"
android:text="@string/list_empty"
android:textColor="@color/white"
android:textSize="24sp" />
</LinearLayout>
答案 2 :(得分:0)
嗯,也许原因是视图没有设置布局参数。尝试为该视图设置一些布局参数,我认为这将有效。像这样:
emptyListText.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
如果这不起作用,请尝试使用以下内容对ListView的父级(R.id.list)中的视图进行充气:
mEmptyListView = (LinearLayout) getLayoutInflater().inflate(
R.layout.no_items,
(LinearLayout) findViewById(R.id.list));
mListView.setEmptyView(findViewById(R.id.no_items));
我是从记忆中写的,所以让我知道它是不起作用还是有任何拼写错误。基本上这个想法是你的视图应该添加到布局
GER