首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于水平RecyclerView的ItemTouchHelper

用于水平RecyclerView的ItemTouchHelper
EN

Stack Overflow用户
提问于 2018-10-25 16:46:10
回答 2查看 1.7K关注 0票数 2

我正在尝试为水平回收视图实现ItemTouchHelper。(使用orientation LinearLayoutManager.HORIZONTAL将布局管理器设置为LinearLayoutManager )。例如,我想在向下滑动并向左或向右拖动以交换项目时删除项目。

我看过的所有示例都解释了垂直回收视图或网格中的项目的ItemTouchHelper。

以下是来自以下链接的示例:

https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf

https://medium.com/@xabaras/recyclerview-swiping-with-style-151e21b1af07

如何在水平回收视图中实现向下滑动删除和侧向拖动来交换项目?

EN

回答 2

Stack Overflow用户

发布于 2018-10-25 17:14:12

你可以用这个简单的代码来实现向下滑动来移除。

代码语言:javascript
复制
ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.DOWN) {
            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,  RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            final int position = viewHolder.getLayoutPosition();
            if (direction == ItemTouchHelper.DOWN) {
                //your code for deleting the item from database or from the list
                adapter.removeNote(position);
                adapter.notifyItemRemoved(position)
            }
        }
    };
    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
    itemTouchHelper.attachToRecyclerView(recyclerView);

对于Kotlin极客来说,下面是相同的代码-

代码语言:javascript
复制
val simpleCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.DOWN) {
        override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
            return false
        }

        override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
            if (direction == ItemTouchHelper.DOWN) {
                //your code for deleting the item from database or from the list
                val position = viewHolder.adapterPosition
                noteList.removeAt(position)
                adapter.notifyItemRemoved(position)
            }
        }
    }
    val itemTouchHelper = ItemTouchHelper(simpleCallback)
    itemTouchHelper.attachToRecyclerView(recycler_view)
票数 2
EN

Stack Overflow用户

发布于 2018-10-25 18:50:46

您只需要更改方法"getMovementFlags“。

代码语言:javascript
复制
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
    int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
    return makeMovementFlags(dragFlags, swipeFlags);
}

代码语言:javascript
复制
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    final int swipeFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
    final int dragFlags = ItemTouchHelper.START | ItemTouchHelper.END;
    return makeMovementFlags(dragFlags, swipeFlags);
}

要删除项目,请在"ItemTouchHelperAdapter“中创建一个名为"onSwiped”的新方法,并实现该方法来移除项目

代码语言:javascript
复制
@Override
public boolean onSwiped(int itemPosition, int direction) {
    if(direction == SimpleItemTouchHelperCallback.SWIPED_TO_END) {
        list.remove(itemPosition);
        notifyItemRemoved(itemPosition);
    }else{
        notifyItemChanged(itemPosition);
    }
    return true;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52985066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档