我有一个 ListView,其中包含每个项目上的按钮。我希望项目单击将导致列表的 OnItemClick 事件触发,因为该事件包含比按钮的 OnClick 事件更多的信息(id、位置)。
这是列表中的一个重要操作,这就是为什么我需要按钮并且不希望常规项目单击会导致它触发(我想使按钮可聚焦会起作用)。
这可能吗?
我有一个 ListView,其中包含每个项目上的按钮。我希望项目单击将导致列表的 OnItemClick 事件触发,因为该事件包含比按钮的 OnClick 事件更多的信息(id、位置)。
这是列表中的一个重要操作,这就是为什么我需要按钮并且不希望常规项目单击会导致它触发(我想使按钮可聚焦会起作用)。
这可能吗?
该行是否也可点击?根据该行是否可点击,我可能会执行以下操作之一;
您可以只clickable=false
在按钮上进行设置,并让触摸属性向上到父级,即按钮所在的列表视图行,onItemClickListener
然后应该通知该行
您可以在按钮上设置一个标签(View.setTag(..)),报告按钮所在行的位置,并在onClickListener
您可以按照freshDroid 在此页面上建议的答案进行操作,但这将是低效的,因为您在OnClickListener
创建/回收视图时创建一个新视图,这将导致额外的 GC 工作。
尝试为列表制作自己的适配器。在 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;
}
});