我创建自定义ListViewAdapter
在适配器中我使用setOnClickListener
public View getView(int position, View convertView, ViewGroup parent)
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
row.setOnClickListener(new View.OnClickListener() {})
在活动中我创建了listview
listView.setAdapter(new MyAdaper(this));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {})
但是如果使用setOnClickListener
,则不会引发setOnItemClickListener如果注释setOnClickListener setOnItemClickListener raise
如何使这项工作,以及setOnClickListener和setOnItemClickListener?
答案 0 :(得分:1)
如果您使用自定义listAdapter,您可以将onclickListener设置为您的基本视图中的子视图(在您的示例中 - 行);在调用堆栈中,listView.setOnItemClickListener位于row.setOnclickListener之上。实际上两者都给出了相同的结果,因为行(在此上下文中)是默认ListView中的一个简单项。
在这种情况下解决方案是:
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
((Button)row.findViewById(R.id.btn1)).setOnClickListener(new View.OnClickListener() {});
}
在上面的示例中,我使用xml文件,如listView.layoutResourceId项包含一个Button(R.id.btn1)。之后,您可以将Click侦听器设置为ListView和Button.And它将是不同的侦听器,它们将产生不同的\相同的结果(这完全取决于实现)
答案 1 :(得分:0)
我找到了下一个方法(感谢Raghunandan关于“你不能同时拥有”)
在适配器
中private android.view.View.OnClickListener onClickListener;
public void setOnClickListener(android.view.View.OnClickListener l) {
onClickListener = l;
}
private android.view.View.OnLongClickListener onLongClickListener;
public void setOnLongClickListener(android.view.View.OnLongClickListener l) {
onLongClickListener = l;
}
public View getView(int position, View convertView, ViewGroup parent) {
row.setOnClickListener(new View.OnClickListener() {
//My action
if (onClickListener != null)
onClickListener.onClick(view);
})
}
row.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
//My action
if (onLongClickListener != null)
return onLongClickListener.onLongClick(view);
return true;
}
});