Recyclerview 拖放 ontouch

     2023-05-08     78

关键词:

【中文标题】Recyclerview 拖放 ontouch【英文标题】:Recyclerview Drag and Drop ontouch 【发布时间】:2019-06-06 00:18:10 【问题描述】:

我已经使用ItemTouchHelperrecyclerview中实现拖放。它工作正常。但它只适用于长按。我需要用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);
         
    ;

这是我使用的代码。请帮帮我!!!

【问题讨论】:

你可以看看这个例子....journaldev.com/23208/android-recyclerview-drag-and-drop 你可以看看我做的这个解决方案:***.com/a/57204561/878126 【参考方案1】:

    覆盖ItemTouchHelperisLongPressDragEnabled并返回false

    https://developer.android.com/reference/android/support/v7/widget/helper/ItemTouchHelper.Callback#isLongPressDragEnabled()

    override 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的文档中找到了实现

我亲自尝试过,效果很好。

【讨论】:

【参考方案2】:

您可以在 onBindViewHolder 中使用以下代码来开始触摸拖动

holder.layout.setOnTouchListener(new View.OnTouchListener() 
    @Override
    public boolean onTouch(View view, MotionEvent event) 

        ClipData data = ClipData.newPlainText("", "");
        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
        view.startDrag(data, shadowBuilder, view, 0);
        view.setVisibility(View.INVISIBLE);

        return false;
    
); 

layout 表示您的项目布局。在您可以将 DragListener 用于所有其他事件之后,例如

DragEvent.ACTION_DRAG_STARTED
DragEvent.ACTION_DRAG_ENTERED
DragEvent.ACTION_DRAG_EXITED
DragEvent.ACTION_DROP
DragEvent.ACTION_DRAG_ENDED

【讨论】:

在 Recyclerview 之外拖放视图

】在Recyclerview之外拖放视图【英文标题】:DragandDropviewoutsideofRecyclerview【发布时间】:2016-05-0412:15:29【问题描述】:我想要实现的目标:我希望在可滚动布局(Recyclerview和GridlayoutManager)中有一个视图,其中包含图块(视图)。... 查看详情

拖放从 SQLiteDatabase 填充的 RecyclerView

】拖放从SQLiteDatabase填充的RecyclerView【英文标题】:DragandDropRecyclerViewWhichisPopulatedfromSQLiteDatabase【发布时间】:2017-06-1100:01:45【问题描述】:信息:我有一个RecyclerView,我用ListAdapter类中的ArrayListdataList填充它。我从SQLiteDatabase表... 查看详情

在 RecyclerView 中的特定位置拖放停止

】在RecyclerView中的特定位置拖放停止【英文标题】:DragDrophaltforSpecificPositioninRecyclerView【发布时间】:2019-06-1009:48:27【问题描述】:有没有什么方法可以使用RecyclerView来停止项目的拖放到特定位置。我已经使用下面的代码实现了... 查看详情

使用 DiffUtil 在 RecyclerView 上添加拖放

】使用DiffUtil在RecyclerView上添加拖放【英文标题】:AddDragandDroponRecyclerViewwithDiffUtil【发布时间】:2021-09-2717:19:52【问题描述】:我有一个从房间数据库更新的列表。我从Room接收更新的数据作为新列表,然后将其传递给ListAdapter的... 查看详情

RecyclerView 拖放喜欢 - 文件和文件夹

】RecyclerView拖放喜欢-文件和文件夹【英文标题】:RecyclerViewDragandDroplike-FILE&FOLDER【发布时间】:2018-05-0523:36:10【问题描述】:现在我正在使用RecyclerView的ItemTouchHelper.Callback来重新排列回收站视图中项目的位置。但现在我需要... 查看详情

在ANDROID中相互拖放时合并Recyclerview中的项目?

】在ANDROID中相互拖放时合并Recyclerview中的项目?【英文标题】:MERGEITEMSinRecyclerViewwhendragged&droppedononeanother,inANDROID?【发布时间】:2022-01-1012:51:03【问题描述】:使用ItemTouchHelper类,我们可以在回收站视图中拖放和滑动项目;... 查看详情

RecyclerView通过itemTouchHelper拖放快速拖动时很奇怪

】RecyclerView通过itemTouchHelper拖放快速拖动时很奇怪【英文标题】:RecyclerViewdrag&dropviaitemTouchHelperbahavingstrangewhendraggingfast【发布时间】:2016-05-1808:36:29【问题描述】:我一直在关注此链接"DragandSwipewithRecyclerView-byIPaulPro"的指南... 查看详情

拖放 RecyclerView 的第一项会移动几个随机位置

】拖放RecyclerView的第一项会移动几个随机位置【英文标题】:Drag&DroppingthefirstitemoftheRecyclerViewmovesseveralrandompositions【发布时间】:2021-04-2412:50:28【问题描述】:目前,我有一个RecyclerView实现了新的ListAdapter,使用submitList来区... 查看详情

Android:在 RecyclerView 中拖放项目时如何有效更新 SQLite 数据库?

】Android:在RecyclerView中拖放项目时如何有效更新SQLite数据库?【英文标题】:Android:HowdoIeffectivelyupdatetheSQLitedatabasewhendragginganddroppingitemsintheRecyclerView?【发布时间】:2018-07-2623:35:16【问题描述】:我有这个待办事项列表应用程序... 查看详情

android在拖放时滚动

...为拖放应该在长按项目而不是正常按下时发生。这是我的onTouch,它位于扩展ListView的MyListView中@Overridepublicboolea 查看详情

如何为可移动的浮动按钮设置 onTouch 和 onClick 功能

】如何为可移动的浮动按钮设置onTouch和onClick功能【英文标题】:HowtosetonTouchandonClickfunctionsforamovablefloatingbutton【发布时间】:2019-08-2916:32:32【问题描述】:我在此处制作了一个可移动的浮动按钮,用于引用某个文档,现在它可... 查看详情

RecyclerView on drop

】RecyclerViewondrop【英文标题】:【发布时间】:2021-12-2722:49:40【问题描述】:我有RecyclerView拖放功能,但我想在Drop上做一些计算。当我将expensiveFunction()放入onMove()时,它会在每次位置更改时触发,直到拖动结束。这是一个很大... 查看详情

RecyclerView 内容落后而不是上面的 TextView

】RecyclerView内容落后而不是上面的TextView【英文标题】:RecyclerViewcontentgoesbehindandnotoverTextViewabove【发布时间】:2020-04-2122:46:34【问题描述】:考虑一下这个来自MaterialDesign的关于拖放项目的视频:Materialdesignreorderinglist在视频中,... 查看详情

Android recyclerview拖拽自定义功能

】Androidrecyclerview拖拽自定义功能【英文标题】:Androidrecyclerviewdraganddropcustomfetures【发布时间】:2015-12-0705:56:50【问题描述】:我正在尝试开发一个简单但自定义的recyclerview项目拖放功能。这个想法是将一个孩子拖到一个特定的... 查看详情

将 View 拖放到 RecyclerView 项目 Android 上

】将View拖放到RecyclerView项目Android上【英文标题】:DragViewandDropitonRecyclerViewitemAndroid【发布时间】:2017-06-2307:18:59【问题描述】:我正在开发一个android应用程序,它的屏幕包含以下内容:Recycler视图包含如下图所示的类别底部的... 查看详情

RecyclerView 适配器 notifyDataSetChanged 停止花哨的动画

】RecyclerView适配器notifyDataSetChanged停止花哨的动画【英文标题】:RecyclerViewAdapternotifyDataSetChangedstopsfancyanimation【发布时间】:2015-02-0217:35:44【问题描述】:我正在构建一个基于RecyclerView的组件,允许用户通过拖放重新排序项目。... 查看详情

重新启动时保持拖放项目位置

...ing【发布时间】:2016-05-0409:53:12【问题描述】:我有一个RecyclerView-Grid,带有拖放功能,使用这个code我已经设法实现了这一点,并且做了很多更改,只有一个问题,我无法在重新启动时保存拖动的项目位置(应用程序不是手机)... 查看详情

向下滚动时 RecyclerView 项目之间的间隙较大

】向下滚动时RecyclerView项目之间的间隙较大【英文标题】:LargegapformsbetweenRecyclerViewitemswhenscrollingdown【发布时间】:2016-06-1911:03:39【问题描述】:我正在制作一个待办事项列表应用程序,在测试它时,由于某种原因,每当我尝试... 查看详情