我有一个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);
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
列表显示:
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
Run Code Online (Sandbox Code Playgroud)
我的代码出了什么问题?当我有物品时,我会在列表中看到它们.但是当列表为空时我看不到TextView.
mmb*_*ian 101
您的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>
Run Code Online (Sandbox Code Playgroud)
这就是你的代码的样子
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);
Run Code Online (Sandbox Code Playgroud)
gur*_*gui 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);
Run Code Online (Sandbox Code Playgroud)
现在很好
dan*_*nea 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);
Run Code Online (Sandbox Code Playgroud)
Sam*_*Sam 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>
Run Code Online (Sandbox Code Playgroud)
现在你可以使用:
view.setEmptyView(findViewById(R.id.empty_list_item));
Run Code Online (Sandbox Code Playgroud)
Har*_*vey 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);
Run Code Online (Sandbox Code Playgroud)
推理:
问题的核心是AdapterView类实际上并没有将传递给setEmptyView()的视图添加到任何容器.它只是改变了可见性.正如其他答案所描述的那样,有很多方法可以将"空视图"对象放入容器中.
AdapterView的文档应该真正更新以反映这一点,因为它并不明显.
| 归档时间: |
|
| 查看次数: |
38606 次 |
| 最近记录: |