我正在尝试在列表视图中设置可点击按钮的页眉和页脚。问题是OnClickListener没有响应任何东西,我无法弄清楚我做错了什么。
$ View header = getLayoutInflater().inflate(R.layout.header_layout, null, true);
getListView().addHeaderView(header);
myAdapter = new myAdapter(this);
header.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do what I want when i click it
}
});
更新
我最终想出的最佳解决方案是在标题布局中添加一个单独的按钮,然后像这样做:
View header = getLayoutInflater().inflate(R.layout.header_layout, null);
Button headerButton = (Button)header.findViewById(R.id.header_button);
getListView().addHeaderView(header);
headerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// My Click Stuff
}
});
答案 0 :(得分:9)
您需要处理ListView
的{{1}}中的点击。只需检查这是onItemClick
中的第一个或最后一个项目,并以这种方式处理点击。您需要将其视为adapter
中的项目。
答案 1 :(得分:4)
我看到一些问题:
答案 2 :(得分:3)
有一种更简单的解决方案:
只需将“OnClickListener”设置为应用的视图:
View view = inflater.inflate(R.layout.xxx, null);
view.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//do something
}
});
很容易解决它的事情!
答案 3 :(得分:2)
页脚示例:
mYourListView.addFooterView(footer, null, true);
然后在OnItemClickListener中,您可以检查:
@Override
public void onItemClick(AdapterView<?> parent,
View view, final int position, final long id) {
if (id != -1) {
// do whatever you do with list items
} else {
// do what you need after the footer been clicked
}
(如果您需要处理并且页眉和页脚单击,请检查位置 - 0表示页眉,[adapter.getCount() - 1表示页脚)
此方法将在页脚单击时提供相同的视觉效果,就像单击列表项一样。 (但是,如果你不需要这种效果,只需将OnClickListener添加到页脚,它将拦截所有页脚点击)
答案 4 :(得分:0)
对我有用的是什么:
在对标题视图进行膨胀之前,在将其添加到列表视图之前,我使用该视图获取子视图并在其上添加单击侦听器
myHeaderView.findViewById(R.id.myButton).setOnClickListener(new OnClickListener() { ... } );
另外,当我将它添加到listView时,我使用了重载的构造函数,第三个变量设置为true
mListView.addHeaderView(myHeaderView, null, true);
答案 5 :(得分:0)
正如@LuxuryMode所说,你应该处理ListView的onItemClick。以下是如何做到这一点:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long rowId) {
// if statement
}
获取标题:
if (position == 0) { )
获取页脚:
if (position == adapter.getCount()) { ) // if there is no header
if (position == adapter.getCount() + 1) { ) // if there is a header
还有其他方法可以做到这一点。以下是您可以比较的一些事项:
arrayList.size() // number of items in the array (if your adapter is using an array)
cursor.getCount() // number of data items in the cursor (if your adapter is using a cursor)
adapter.getCount() // number of data items passed in by the cursor (or at least that is what a custom adapter should report)
listview.getCount() // number of data items from the adapter + a header and/or footer view
因此,使用页眉或页脚会使listview.getCount()比cursor.getCount()大1。如果同时使用页眉和页脚,那么它将大于2。