我在ListView中遇到setEmptyView方法的问题。
这是我的Java代码:
ListView view = (ListView)findViewById(R.id.listView1);
view.setEmptyView(findViewById(R.layout.empty_list_item));
ArrayAdapter<Session> adapter1 = new ArrayAdapter<Session>(this, android.R.layout.simple_list_item_1,
android.R.id.text1, MainController.getInstanz().getItems());
view.setAdapter(adapter1);
empty_list_item:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/emptyList" >
</TextView>
列表视图:
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
我的代码出了什么问题?
当我有物品时,我会在列表中看到它们。但是当列表为空时,我看不到TextView
。
答案 0 :(得分:99)
你的TextView应该放在ListView项目的正下方,其可见性设置为不变(android:visibility =“gone”),不要将它放在另一个布局中。 这就是你的主要布局的样子
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listViewFangbuch"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
<TextView
android:id="@+id/empty_list_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
android:text="@string/emptyList" >
</TextView>
</LinearLayout>
这就是你的代码看起来像
的样子ListView view = (ListView)findViewById(R.id.listViewFangbuch);
view.setEmptyView(findViewById(R.id.empty_list_item));
ArrayAdapter<Session> adapter1 = new ArrayAdapter<Session>(this, android.R.layout.simple_list_item_1,
android.R.id.text1, MainController.getInstanz().getItems());
view.setAdapter(adapter1);
答案 1 :(得分:32)
问题是,我必须做一个addContentView:
View empty = getLayoutInflater().inflate(R.layout.empty_list_item, null, false);
addContentView(empty, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
view.setEmptyView(empty);
现在很好
答案 2 :(得分:30)
对我而言,这些答案都不适合我。我必须做的是手动(膨胀)将空视图添加到Listview的“父”视图中:
ListView my_list = (ListView) findViewById(R.id.my_list);
View emptyView = getLayoutInflater().inflate(R.layout.empty_view,null);
((ViewGroup)my_list.getParent()).addView(emptyView);
listView.setEmptyView(emptyView);
答案 3 :(得分:18)
使用setEmptyView()
的最简单方法是将“空”TextView和ListView放在相同的布局中,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/empty_list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/emptyList"
android:visibility="gone" />
</LinearLayout>
现在你可以使用:
view.setEmptyView(findViewById(R.id.empty_list_item));
答案 4 :(得分:13)
在尝试了此处提供的所有解决方案并进行实验之后,我相信下面的代码是当ListView和空View在自动ID设置的布局中不是并排时使用的最佳方法。
ViewGroup parentGroup = (ViewGroup)getListView().getParent();
View empty = getActivity().getLayoutInflater().inflate(R.layout.list_empty_view,
parentGroup,
false);
parentGroup.addView(empty);
getListView().setEmptyView(empty);
推理:
答案 5 :(得分:6)
问题的核心是AdapterView类实际上没有将传递给setEmptyView()的视图添加到任何容器。它只是改变了可见性。正如其他答案所描述的那样,有很多方法可以将“空视图”对象放入容器中。
应该更新AdapterView的文档以反映这一点,因为它并不明显。
答案 6 :(得分:4)
在XML中创建一个布局,指定要使用的ListView
和空视图。如果您为其提供@android:id/list
和@android:id/empty
的ID,则当列表为空时,android会自动将视图与id:empty
一起使用。
答案 7 :(得分:3)
有一些正确的解决方案,但我认为这是最好的方法!
View emptyView = getLayoutInflater().inflate(R.layout.empty_list_cart, null);
addContentView(emptyView, listView.getLayoutParams()); // You're using the same params as listView
listView.setEmptyView(emptyView);
listView.setAdapter(adapter);
答案 8 :(得分:1)
这两种方法也帮助我显示空视图:
adapter.notifyDataSetChanged();
list.invalidateViews();
答案 9 :(得分:1)
只需使用,
View emptyView = getLayoutInflater().inflate(R.layout.empty_view, null);
((ViewGroup)listView.getParent()).addView(emptyView);
而不是listView.setEmptyView(emptyView);
答案 10 :(得分:0)
我的问题是,我添加了一个看似无法使用空视图的页脚视图。 删除页脚视图后,将显示空视图。
答案 11 :(得分:0)
我刚刚学习了android,但是来自https://developer.android.com/guide/topics/ui/layout/listview.html的片段 描述了一些不同的方法:
// Create a progress bar to display while the list loads
ProgressBar progressBar = new ProgressBar(this);
progressBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, Gravity.CENTER));
progressBar.setIndeterminate(true);
getListView().setEmptyView(progressBar);
// Must add the progress bar to the root of the layout
ViewGroup root = (ViewGroup) findViewById(android.R.id.content);
root.addView(progressBar);
ViewGroup root =(ViewGroup)findViewById(android.R.id.content);