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);

然后在您的 AdaptergetView 中,这将产生一个可点击的行。假定按钮位于膨胀的 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 中执行的任何操作都可以在 ListViewOnItemClickListener 中轻松执行。 (视图上的setOnClickListener 隐式地将视图设置为可点击,这显然可以防止ListView 对应的OnItemClickListener 被调用。)

ImageButton 在项目被按下或翻转时的视觉状态而言,行为与预期的一样。

解决方案有点错觉,因为它是被按下的列表项而不是ImageButton 本身,所以如果按钮没有占据整个列表项,单击项目中的其他位置仍然会使按钮可绘制状态反映点击。对焦也一样。这可能是值得付出的代价。

【讨论】:

如果您的 ListView 行有多个可点击项,您可以通过在***列表项布局上设置 android:descendantFocusability="blocksDescendants" 而不是在您的视图上设置 OnClickListener 来实现您想要的从 getView() 返回。在单个项目上设置 OnClickListeners 仍然有效。 这个解决方案也对我有用。在我的情况下,当单击 RadioButton 时,我没有在 OnItemClickListener 中获得单击事件。 我已经坚持了 6 个小时,我真的需要帮助。 ***.com/questions/35108940/why-cant-i-remove-an-item/…【参考方案4】:

这肯定会奏效。将此添加到布局定义中。

android:descendantFocusability="blocksDescendants" 

找到解决方案here

【讨论】:

【参考方案5】:

为每个视图设置OnClickListener 的另一种方法是不使用ImageButton - 改用ImageViewImageView 仍然可以将事件发送到 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】:

我在布局定义中对@9​​87654321@ 和setFocusable="false" 进行了子分类,但对我不起作用。它解决了在子类的构造函数中调用setFocusable(false)

【讨论】:

【参考方案12】:

使用ScrollView 可以阻止onItemClickListener 接收输入。

希望这对任何人都有帮助。

【讨论】:

以上是关于ListView OnItemClickListener 没有响应?的主要内容,如果未能解决你的问题,请参考以下文章

在一个listview中嵌套ListView可以吗?

求助scrollview嵌套viewpager 放listview 不能滑动

c# listview 怎么添加图片

Android listview 的用法? 越详细越好。

listview 如何总让最后一项选中?????

listview中items的图片怎么设置其大小?