android - Recyclerview 拖放 ontouch
问题描述
我曾经ItemTouchHelper
在recyclerview
. 它工作正常。但它只适用于长按。我需要这样做onTouch
ItemTouchHelper.Callback itemTouchHelperCallback = new ItemTouchHelper.Callback() {
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
Collections.swap(strings, viewHolder.getAdapterPosition(), target.getAdapterPosition());
adapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
//TODO
}
//defines the enabled move directions in each state (idle, swiping, dragging).
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG,
ItemTouchHelper.DOWN | ItemTouchHelper.UP | ItemTouchHelper.START | ItemTouchHelper.END);
}
};
这是我使用的代码。请帮我!!!
解决方案
覆盖
ItemTouchHelper
'sisLongPressDragEnabled
并返回 falseoverride fun isLongPressDragEnabled(): Boolean = false
向 ViewHolder 的实现添加回调并使用它
buttonToDrag.setOnTouchListener { v, event -> listener.onTouch(this, event) false }
在活动或片段中,使用
startDrag
private lateinit var itemTouchHelper: ItemTouchHelper override fun onTouch(viewHolder: RecyclerView.ViewHolder, event: MotionEvent) { if (event.actionMasked == MotionEvent.ACTION_DOWN) { itemTouchHelper.startDrag(viewHolder) } }
我在https://developer.android.com/reference/android/support/v7/widget/helper/ItemTouchHelper#startdrag的文档中找到了实现
我亲自尝试过,它就像一个魅力。
推荐阅读
- apache - 我的域永久移动了 301,最终加载或不加载我的 Apache 服务器
- ios - iOS Mapbox MGLMapView:使图像适合 MGLMapView
- powershell - 您如何比较 whoami /groups 的输出以检查 powershell 中是否存在某个值?
- python - 使用 eval() 将字符串作为函数调用
- angular - Angular:使用代码的管道正在模型数据上添加 $ 符号
- javascript - WebGL JavaScript 游戏在 Chrome 中导致 STATUS_ACCESS_VIOLATION
- java - Android应用程序运行一段时间后自动终止
- java - 如何在 Selenium Java 测试框架中指定从 chrome 下载的文件的名称
- google-apps-script - 降低 urlFetchApp.fetch 函数的超时时间
- css - WooCommerce 插件视图问题的问题