将图像按钮添加到 ListView 中的自定义项的布局会停止接收长按事件

Posted

技术标签:

【中文标题】将图像按钮添加到 ListView 中的自定义项的布局会停止接收长按事件【英文标题】:Adding a imagebutton to the layout of a custom item in a ListView stops receiving the long pressed event 【发布时间】:2012-12-16 11:04:33 【问题描述】:

我正在使用自定义适配器/自定义项布局(2x TextViews 和 4x ImageButtons)制作一个列表视图,我希望能够长按列表项来做某事,并且仍然能够按下布局上的 ImageButtons。

问题是,如果我只有 TextViews,它可以工作并捕获长按事件,只要我添加一个 ImageButton,长按事件就会停止工作。知道为什么会这样吗?

【问题讨论】:

尝试使 ImageButton 无法聚焦。 【参考方案1】:

当您在项目布局中添加可点击视图(如按钮)时,它们会捕获点击事件并且不会冒泡到底层 ListView,要解决此问题,您可以将长点击侦听器添加到项目的根布局.

所以不要在你的活动中这样做:

ListView lv = (ListView) findViewById(R.id.lv);
lv.setOnItemLongClickListener(listener);

您在适配器中执行此操作:

@Override
public View getView(int position, View view, ViewGroup parent) 
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.item, parent, false);

    view.setLongClickable(true);
    view.setOnLongClickListener(listener);

【讨论】:

这显然有效,将进行更多测试以查看它是否真的满足我的需求,谢谢:) 很高兴为您服务。不久前我遇到了完全相同的问题,但这是我找到的唯一解决方案。如果您发现其他东西,请告诉我:)

以上是关于将图像按钮添加到 ListView 中的自定义项的布局会停止接收长按事件的主要内容,如果未能解决你的问题,请参考以下文章

Listview ArrayAdapter 自定义项 onClickListener 仅第一次工作

如何使用菜单布局将自定义项添加到 NavigationView?

带有 ListView 自定义项的 Android 小部件

使用 QStyledItemDelegates 作为 QListView 中的自定义项

如何使用 asp.net mvc Html.DropDownList 帮助器将自定义项添加到下拉列表的顶部?

意图选择器屏幕中自定义项目的回调