我有带有附加RecyclerView的ItemTouchHelper,我用
class ItemTouchHelperCallback(
private val adapter: ItemTouchHelperAdapter
) : ItemTouchHelper.Callback() {
override fun isLongPressDragEnabled(): Boolean {
return true
}
...
}我将调用振动的每一个拖动事件启动。在精确的拖曳启动时刻。
为此,我在ViewHolder中设置了touch listener。然后我试着为第一次ACTION_MOVE事件调用振动。不幸的是,它发生的速度比项目拖拽是可能的。我希望振动和可能性移动项目发生在同一时间。为了给用户准确的触觉反馈,他可以从现在起拖动和移动物品。
我期望ItemTouchHelper或ItemTouchHelper.Callback公开适当的API。但我注意到,在ItemTouchHelper内部,在预期的时刻有值ACTION_STATE_DRAG的mActionState (在onLongPress()中,所以这两个类应该知道何时开始拖动!)很遗憾他们没有公开分享他们的知识。
而且,我注意到了非常similar topic about action drag ended,但我无法找到解决方案的action drag started那里。
发布于 2021-01-27 10:02:51
您需要将此方法添加到回调中。
override fun onSelectedChanged(viewHolder: ViewHolder?, actionState: Int) {
super.onSelectedChanged(viewHolder, actionState)
if (actionState == ACTION_STATE_DRAG) {
// your code here
}
}这对我来说很好
发布于 2020-08-24 13:21:31
我最终找到了黑客解决方案,这是ItemTouchHelper.Callback()的一部分。getMovementFlags几乎在同一时刻被调用,就像将mActionState更改为ACTION_STATE_DRAG一样。内部onLongPress() of ItemTouchHelper` `。
打了两次电话,所以小心点-)
在compileSdkVersion = 28上测试
不过,我想找到更好的解决办法。
https://stackoverflow.com/questions/63561911
复制相似问题