Android 单击按钮时,单击listview

Android 单击按钮时,单击listview,android,listview,onclick,onitemclick,Android,Listview,Onclick,Onitemclick,我有一个列表视图,其中包含每个项目上的按钮。 我希望项目单击将导致列表的OnItemClick事件激发, 因为该事件包含的信息(id、位置)比按钮的OnClick事件多 这是列表中的一个重要操作,这就是为什么我需要按钮,而不希望常规的项目单击会导致它触发(我猜使按钮可聚焦会起作用) 这可能吗?尝试为列表创建自己的适配器。在getView()方法中,执行必要的要求 setListAdapter(new ArrayAdapter<string>(this, R.layout.list_i

我有一个列表视图,其中包含每个项目上的按钮。 我希望项目单击将导致列表的OnItemClick事件激发, 因为该事件包含的信息(id、位置)比按钮的OnClick事件多

这是列表中的一个重要操作,这就是为什么我需要按钮,而不希望常规的项目单击会导致它触发(我猜使按钮可聚焦会起作用)


这可能吗?

尝试为列表创建自己的适配器。在getView()方法中,执行必要的要求

setListAdapter(new ArrayAdapter<string>(this, R.layout.list_item, strings) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row;

if (null == convertView) {
row = mInflater.inflate(R.layout.list_item, null);
} else {
row = convertView;
}

Button bt1 = (Button) row.findViewById(android.R.id.bt1);
bt1.setOnClickListener(new View.OnClickListener() {
       public void onClick(View v){
       //you will get position and do necessary method 
       }
});

return row;
}
});
setListAdapter(新的ArrayAdapter(此,R.layout.list_项,字符串){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
查看行;
if(null==convertView){
row=mInflater.充气(R.layout.list_项,空);
}否则{
行=转换视图;
}
按钮bt1=(按钮)行.findViewById(android.R.id.bt1);
bt1.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
//你将获得职位并采取必要的方法
}
});
返回行;
}
});

行是否也可以单击?根据行是否可单击,我可能会执行以下操作之一:

  • 您只需在按钮上设置
    clickable=false
    ,然后让触摸正确到达父级,即按钮所在的列表视图行,然后应通知该行的
    onItemClickListener

  • 您可以在按钮上设置一个标记(),报告按钮所在行的位置,并在
    onClickListener

  • 您可以按照freshDroid在此页面上建议的答案进行操作,但这将是低效的,因为每次创建/回收视图时,您都要创建一个新的
    OnClickListener
    ,这将导致额外的GC工作


  • 这是可行的(只要我对职位使用最终var)。谢谢。你想要哪个id?你的列表中有哪些项目?我的问题实际上更复杂,因为有时候我到达onClick的位置是错误的。但这是另一个问题…发布你的新问题。我会尽力帮助你的。嗯,实际上我认为这不是最好的办法。您正在为每一行创建一个新的匿名OnClickListener对象,这不是很有效,并且会导致更多的GC工作。请看我的答案……我就是这样工作的。按钮上的clickable=false,但它不会传播到McClickListener。这种方法对你有用吗?