ListView OnItemClickListener 没有响应?
Posted
技术标签:
【中文标题】ListView OnItemClickListener 没有响应?【英文标题】:ListView OnItemClickListener Not Responding? 【发布时间】:2011-01-23 00:01:21 【问题描述】:我到处寻找解决方案,但我不知道如何实现它。我的OnItemClickListener
在我的ListView
行上以某种方式被禁用,因为我在行布局中有一个ImageButton
,它接管了焦点。我发现了很多问题,但没有一个问题能帮我解决问题。
我已经检查了this 的问题,但我无法真正确定它的正面或反面。我只需要一种方法来获取可点击的行,这样我就可以检测到何时按下了一行。长按和对焦可以正常工作。
【问题讨论】:
【参考方案1】:将 OnClickListener 添加到从适配器返回的每个视图中,而不是 OnItemClickListener。您需要使用setItemsCanFocus
设置您的列表:
ListView list = (ListView) findViewById(R.id.myList);
list.setAdapter(new DoubleClickAdapter(this));
list.setItemsCanFocus(true);
然后在您的 Adapter 的getView
中,这将产生一个可点击的行。假定按钮位于膨胀的 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;
【讨论】:
别忘了回收视图!使用 convertView,不要每次都膨胀一个新的。 我基本上已经做到了,尽管我觉得我在做某事时遇到了问题。我会再试一次,也许这只是一个愚蠢的错误。 好的,谁能解释一下为什么 ListView 控件没有像宣传的那样工作?我也遇到过同样的问题,虽然触摸响应时间不好,但此解决方案有效。 我知道的老问题,但您也可以在适配器的“newView”方法中创建 onclicklistner。这将保存每次用户滚动列表时调用的此过程 如果您仍然希望整行可点击,这不是一个理想的解决方案,您应该使用***.com/a/4518810/9636【参考方案2】:设置ImageButton
的属性:
android:focusable="false"
因为AbsListView.onTouchEvent
检查child.hasFocusable()
。
【讨论】:
非常适合 TextViews。对于 Button 来说,情况并非如此。 如果你使用 android:inputType 作为 textview,你也应该删除它。 比获奖答案更好的选择。注册一个监听器,并处理它。启动内存更少。 我已经坚持了 6 个小时了,我真的需要帮助。 ***.com/questions/35108940/why-cant-i-remove-an-item/… 添加另一个发现 - 不要使用“视图”小部件,使用 ImageView 或适用时【参考方案3】:我已经在 SDK 级别 8 和 16 上测试了以下解决方案。
在getView()
setFocusable(false);
setClickable(false);
而不是在适配器的 getView()
中将它们设置为 true,而是按照我认为原始问题想要的方式进行,这意味着如果 OnClickListener
未在 getView()
中设置,则会调用 OnItemClickListener
。
我假设您可以在 View 的 OnClickListener
中执行的任何操作都可以在 ListView
的 OnItemClickListener
中轻松执行。
(视图上的setOnClickListener
隐式地将视图设置为可点击,这显然可以防止ListView
对应的OnItemClickListener
被调用。)
就ImageButton
在项目被按下或翻转时的视觉状态而言,行为与预期的一样。
解决方案有点错觉,因为它是被按下的列表项而不是ImageButton
本身,所以如果按钮没有占据整个列表项,单击项目中的其他位置仍然会使按钮可绘制状态反映点击。对焦也一样。这可能是值得付出的代价。
【讨论】:
如果您的 ListView 行有多个可点击项,您可以通过在***列表项布局上设置android:descendantFocusability="blocksDescendants"
而不是在您的视图上设置 OnClickListener
来实现您想要的从 getView() 返回。在单个项目上设置 OnClickListener
s 仍然有效。
这个解决方案也对我有用。在我的情况下,当单击 RadioButton 时,我没有在 OnItemClickListener 中获得单击事件。
我已经坚持了 6 个小时,我真的需要帮助。 ***.com/questions/35108940/why-cant-i-remove-an-item/…【参考方案4】:
这肯定会奏效。将此添加到布局定义中。
android:descendantFocusability="blocksDescendants"
找到解决方案here
【讨论】:
【参考方案5】:为每个视图设置OnClickListener
的另一种方法是不使用ImageButton
- 改用ImageView
。 ImageView
仍然可以将事件发送到 OnClickListener
并且不会接管焦点。
【讨论】:
【参考方案6】:最好的方法是:
android:focusable="false"
android:focusableInTouchMode="false"
为Imagebutton
设置这些属性并尝试。
我
【讨论】:
【参考方案7】:对于我这个问题的版本,问题是我将我的TextView
对象设置为android:inputType="textMultiLine"
。当我删除这一行时,列表不可点击的问题就消失了。看起来像个讨厌的小虫子。
另外,我仍然可以毫无问题地使用android:minLines/android:maxLines
属性,所以这不是什么大问题。只是不是我期望的解决方案。
【讨论】:
我已经坚持了 6 个小时了,我真的需要帮助。 ***.com/questions/35108940/why-cant-i-remove-an-item/…【参考方案8】:以下行解决了我项目中的问题:
<TextView ... android:textIsSelectable="false" />
【讨论】:
【参考方案9】:作为对我有用的替代解决方案,您可以尝试从 BaseAdapter
扩展您的适配器(iso 实现 ListAdapter
接口)
【讨论】:
【参考方案10】:把这个代码 ImageView nextpage= (ImageView)findViewById(R.id.btnEdit);
代替 ImageButton
。现在列表项处于活动状态
【讨论】:
【参考方案11】:我在布局定义中对@987654321@ 和setFocusable="false"
进行了子分类,但对我不起作用。它解决了在子类的构造函数中调用setFocusable(false)
。
【讨论】:
【参考方案12】:使用ScrollView
可以阻止onItemClickListener
接收输入。
希望这对任何人都有帮助。
【讨论】:
以上是关于ListView OnItemClickListener 没有响应?的主要内容,如果未能解决你的问题,请参考以下文章