我有一个由自定义 BaseAdapter 填充的自定义 GridView。 GridView的选择模式是MultiChoiceModal。我想控制长单击时可以激活哪些项目,同时仍然确保它们响应(短)单击事件。 BaseAdapter有一个方法叫做isEnabled
,完美的解决方案是如果它有一个方法isActivatable
表现类似。下一个最佳解决方案是拦截长点击,并仅在可接受时将其传递给默认处理程序。
以下是一些不起作用的事情:
压倒一切isEnabled
在适配器中。这太过分了。在这种情况下,项目将停止响应单击事件。
Calling setLongClickable
对于适配器中每个项目的父视图getView
方法。即使它有效,也充满了问题。不用说,事实并非如此。可能是选择模式的副产品。
设置自定义onLongClickListener
对于适配器中每个项目的父视图getView
方法。 Android Studio 建议在使用任何 AdapterView 时不要这样做。它建议覆盖onItemLongClick
反而。
压倒一切onItemLongClick
在 GridView 中。显然,在这种选择模式下,这也会为您处理。
设置自定义onItemLongClickListener
在 GridView 中。
当配置单元处理此问题时,我将尝试中止操作模式的创建/阻止激活禁用项目onItemCheckedStateChanged
我的 AbsListView.MultiChoiceModeListener 的方法。显然我的想法已经不多了。
我找到了一个简单的解决方案:
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
});
or
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
where view
是您想要防止长按后激活选择模式的项目。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)