ListView OnItemClickListener没有响应?
我到处寻找解决scheme,但我无法弄清楚如何实现它。 我的OnItemClickListener
在我的ListView
行上被禁用,因为我在行布局中有一个ImageButton
,它占据了焦点。 我发现了很多问题,但是没有一个能让我得到任何地方的帮助。
我已经检查了这个问题,但是我真的无法做到这一点。 我只是需要一种方法来获取行可点击,以便我可以检测到一行被按下时。 长按和焦点工作正常。
代替OnItemClickListener ,将OnClickListener添加到从适配器返回的每个视图中。 您需要使用setItemsCanFocus
设置您的列表:
ListView list = (ListView) findViewById(R.id.myList); list.setAdapter(new DoubleClickAdapter(this)); list.setItemsCanFocus(true);
然后在你的Adapter的getView
,这将产生一个可点击的行。 假定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
中做任何事情,就像在ListView
的OnItemClickListener
。 ( setOnClickListener
上的setOnClickListener
隐式设置视图是可点击的,这显然会阻止ListView
的相应OnItemClickListener
被调用)。
这种行为就像人们期望的那样,按照ImageButton
的视觉状态,当项目被按下或滚动时。
该解决scheme是一个轻微的幻想,因为它是被按下的列表项,而不是ImageButton
本身,所以如果button不占用整个列表项,单击项目中的其他地方仍然会使该button的可绘制状态反映点击。 同样的重点。 这可能是一个值得付出的代价。
这一定会工作。 将其添加到布局定义中。
android:descendantFocusability="blocksDescendants"
在这里find解决scheme
为每个视图设置一个OnClickListener
替代方法是不使用ImageButton
,而是使用ImageView
。 ImageView
仍然可以将事件发送到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
。 现在列表项目是活动的
我有分类ImageButton
和setFocusable="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。
希望这有助于任何人。