ListView OnItemClickListener没有响应?

我到处寻找解决scheme,但我无法弄清楚如何实现它。 我的OnItemClickListener在我的ListView行上被禁用,因为我在行布局中有一个ImageButton ,它占据了焦点。 我发现了很多问题,但是没有一个能让我得到任何地方的帮助。

我已经检查了这个问题,但是我真的无法做到这一点。 我只是需要一种方法来获取行可点击,以便我可以检测到一行被按下时。 长按和焦点工作正常。

代替OnItemClickListener ,将OnClickListener添加到从适配器返回的每个视图中。 您需要使用setItemsCanFocus设置您的列表:

 ListView list = (ListView) findViewById(R.id.myList); list.setAdapter(new DoubleClickAdapter(this)); list.setItemsCanFocus(true); 

然后在你的AdaptergetView ,这将产生一个可点击的行。 假定button处于膨胀的xml中。

 @Override public View getView(int position, View convertView, ViewGroup parent) { View view = View.inflate(context, R.layout.cell, null); view.setClickable(true); view.setFocusable(true); view.setBackgroundResource(android.R.drawable.menuitem_background); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new AlertDialog.Builder(context).setTitle("touched").show(); } }); return view; } 

设置你的ImageButton的属性:

 android:focusable="false" 

因为AbsListView.onTouchEvent检查child.hasFocusable()

我在SDK级别8和16上testing了以下解决scheme。

getView()

 setFocusable(false); setClickable(false); 

而不是在适配器的getView()中设置它们为true,这是我认为原始问题所需要的,并且意味着OnItemClickListener被调用,只要OnClickListener没有在getView()设置。

我假设你可以在View的OnClickListener中做任何事情,就像在ListViewOnItemClickListener 。 ( setOnClickListener上的setOnClickListener隐式设置视图是可点击的,这显然会阻止ListView的相应OnItemClickListener被调用)。

这种行为就像人们期望的那样,按照ImageButton的视觉状态,当项目被按下或滚动时。

该解决scheme是一个轻微的幻想,因为它是被按下的列表项,而不是ImageButton本身,所以如果button不占用整个列表项,单击项目中的其他地方仍然会使该button的可绘制状态反映点击。 同样的重点。 这可能是一个值得付出的代价。

这一定会工作。 将其添加到布局定义中。

 android:descendantFocusability="blocksDescendants" 

在这里find解决scheme

为每个视图设置一个OnClickListener替代方法是不使用ImageButton ,而是使用ImageViewImageView仍然可以将事件发送到OnClickListener并且不会占用焦点。

最好的办法是这样的:

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

为这个Imagebutton设置这些属性并尝试。 一世

对于我的这个问题的版本,问题是我已经设置我的TextView对象android:inputType="textMultiLine" 。 当我删除这一行时,列表不可点击的问题消失了。 看起来像一个讨厌的小错误。

此外,我仍然可以android:minLines/android:maxLines地使用android:minLines/android:maxLines属性,所以这不是一个大问题。 只是不是我所期望的解决scheme。

以下行解决了我的项目中的问题:

 <TextView ... android:textIsSelectable="false" /> 

作为替代解决scheme,为我工作,你可以尝试扩展你的适配器从BaseAdapter (iso实现ListAdapter接口)

把这段代码ImageView nextpage= (ImageView)findViewById(R.id.btnEdit); 而不是ImageButton 。 现在列表项目是活动的

我有分类ImageButtonsetFocusable="false"在布局定义没有为我工作。 它解决了在子类的构造函数中调用setFocusable(false)

  listView= (ListView) findViewById(R.id.listview_names); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getBaseContext(),"Clicked Button",Toast.LENGTH_LONG).show(); Log.d("h","clicked"); /* Intent intent=new Intent(MainActivity.this,Display_data.class); intent.putExtra("NAME",n); intent.putExtra("AGE",a); startActivity(intent);*/ } }); 

这个烤面包没有工作

使用ScrollView可以防止onItemClickListener接收input。

希望这有助于任何人。