OnItemClickListener不能与包含ListView的项目button一起使用

我有ListView自定义Adapter ,这种方式提供ViewListView

  public View getView(int position, View convertView, ViewGroup parent) { RelativeLayout.LayoutParams lineParams; RelativeLayout line=new RelativeLayout(context); TextView tv=new TextView(context); tv.setText("Text in postion="+i); lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lineParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); line.addView(tv, lineParams); lineParams.addRule(RelativeLayout.CENTER_IN_PARENT); //checkbox CheckBox checkBox=new CheckBox(context); lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lineParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); lineParams.addRule(RelativeLayout.CENTER_IN_PARENT); line.addView(checkBox, lineParams); return line; } 

ListView里面有一个setOnItemClickListener() ,它应该拦截项目点击事件。 我的问题是,每当我尝试添加checkbox到项目 – 我没有从我的ListView任何反应。 如果我跳过CheckBox或任何其他Button作品。

我真的坚持这个问题,我尝试了各种布局,alignment,包装等 – 没用。 看起来像CheckBox干扰ListView项目单击事件。

任何想法如何克服?

Solutions Collecting From Web of "OnItemClickListener不能与包含ListView的项目button一起使用"

只需将此行添加到项视图而不是listView本身

 android:focusable="false" 

从Android自定义列表查看更详细的信息无法点击项目

如果在列表项中有ImageButton,则需要添加:

 android:descendantFocusability="blocksDescendants" 

到根列表项目元素[例如根布局]。

然后在列表项的每个ImageButton中,您需要添加:

 android:focusableInTouchMode="true" 

这工作对我来说 – 但我使用ImageButtons,而不是标准的button。

我也面临同样的问题,我试图设置android:focusable="false"到列表视图,但它不工作,然后我将此添加到列表视图项目..就像在我的列表视图项目我已经使用切换button,这是创build问题,我添加android:focusable="false"切换button和列表视图上的项目点击监听器再次开始工作

添加以下行到你的listView

 android:choiceMode="singleChoice" 

或者确保将下列行设置为布局文本字段

 android:focusable="false" android:focusableInTouchMode="false" android:clickable="false" 

我在ListView中也遇到了Button的问题。 不幸的是,只需将适配器中的所有对象的焦点设置为false,都不适用于我。

我现在有一个解决方法。

在你的适配器中,如果你还没有这样做,为button(或其他可点击的对象)创build一个OnClickListener。 在那个OnClickListener你自己调用OnItemClickListener。

 public void onClick(View v) { mOnItemClickListener.setOnItemClick(mListView, v, vPos, vId); } 

这意味着您将需要让您的适配器访问父级ListView和OnItemClickListener。

您可以考虑在您的列表视图项目中写入OnTouchEvent,并将适当的touchEvent发送给您的子视图,该button。

如果在Activity中使用ListView ,请确保已经设置了setOnItemClickListener()

 myListView.setOnItemClickListener(this); // if your activity implement OnItemClickListener