问题描述
我通过使用方法 setHeaderView()
和 setFooterView()
和 ListView
向 ListView
添加页脚和页眉视图代码>ViewInflater.这很好用.
I'm adding a footer and header view to a ListView
by using the methods setHeaderView()
and setFooterView()
and a ViewInflater
. That works quite well.
但是如何防止页眉或页脚视图触发 onListItemClick
事件?当然我可以捕获事件并检查它是来自页眉还是页脚,但这只能解决问题的一部分,因为单击时页眉和页脚仍然处于焦点状态.
But how could I prevent the header or footer view from firing onListItemClick
events? Of course I can catch the event and check whether it came from a header or footer, but this only solves one part of the problem, as header and footer got still focused when clicked.
推荐答案
只需使用 ListView#addHeaderView(View v, Object data, boolean isSelectable); 和匹配的 addFooter()
方法.
Simply use the ListView#addHeaderView(View v, Object data, boolean isSelectable); and matching addFooter()
method.
Object data
参数的用途.
The purpose of Object data
parameter.
ListView 源代码将 data
参数描述为:
The ListView source code describes the data
parameter as:
支持视图的数据.这是从 ListAdapter#getItem(int) 返回的.
这意味着如果我使用 listView.getAdapter().getItem(0);
它将从我们的头返回 data
对象.
Which means if I use listView.getAdapter().getItem(0);
it will return the data
Object from our header.
我会用一个例子来详细说明:
I'll elaborate this with an example:
listView = (ListView) findViewById(R.id.list);
String[] array = new String[] {"one", "two", "three"};
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, array);
接下来让我们添加一个标题并设置适配器:
Next let's add a header and set the adapter:
listView.addHeaderView(view, "Potato", false);
listView.setAdapter(adapter);
稍后如果我们问:
Log.v("ListAdapter", listView.getAdapter().getItem(0)); // output: "Potato"
Log.v("ArrayAdapter", adapter.getItem(0)); // output: "one"
这篇关于如何使 ListView 的页眉或页脚不可点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!