回收器视图与滑动操作菜单



我有一个RecyclerView,实现了ItemTouchHelper。我正在使用ItemTouchHelper在RecyclerView中拖动和排序项目。

此外,我正在不同的滑动方向上执行不同的操作。如果用户从左到右(滑动),我只是停用项目的状态。如果他执行从右到左滑动,我会激活相关项目。

我想要什么: 但是现在变化来了,我想要的是我需要在向右或向左滑动后显示一些图标。通过单击这些图标/按钮,我想执行操作。

问题: 问题是正如我告诉你的那样,我已经实现了ItemTouchHelper,然后我是如何执行我想要的(如上所述)

如何解决这个问题?我看过很多库,但它们有局限性,因为该应用程序有很多东西要做,并且我们的应用程序中在RecyclerView上使用了一些实现,所以我真的不想为了这个而冒险其余的实现。

更新 1:为了进一步澄清我的问题,我将添加更多内容。现在我的实现是这样的。但这不是我想要的。我想为任何类型的滑动显示滑动菜单,我的意思是它是左边还是右边我想在项目的左侧和右侧显示一些图标

您可以以iOS滑动菜单为例(请参阅此处)。我想要在安卓中完全相同的行为。

你问的是不可能的事情:建议一个不存在的库(正如你已经发现的那样)。

你要求人们也为你只简要描述的问题找到解决方案。您没有提供任何代码,也没有提供您在尝试提出解决方案时面临的任何特定问题;你基本上期待奇迹发生。

你怎样才能做得更好?

提供类似以下内容:"我正在尝试为回收商视图的行实现滑动解决方案;当我尝试做 YYYY 时,正在发生。这是我做的一段代码,像这样计算,我错过了什么吗?

无论如何。。。

您声称已经在使用 ItemTouchHelper,因此,如果您查看一个非常基本的工作原理,您会注意到该助手最终将通过以下方式直接在画布上绘制:

@Override
public void onChildDraw(
final Canvas canvas,
final RecyclerView recyclerView,
final RecyclerView.ViewHolder viewHolder,
final float deltaX,
final float deltaY,
final int actionState,
final boolean isCurrentlyActive) {

这是从平台ItemTouchHelper.SimpleCallback派生出来的。 所以...

如果要实现解决方案,则需要在那里实现它以执行停止拖动,绘制内容(图标)等操作。

这不是一个微不足道的解决方案,把整个事情做好是很困难的;如果你在RecyclerView上引入"更多的实现",那就更是如此了。

我希望这个答案能为你指明正确的方向,并且你的下一个相关问题更多的是关于你尝试(和失败)做的事情,而不是"请为我做这件事"的情况。(如果你的意图不是这些,请道歉,但你花了5分钟输入这个问题,需要几个小时/几天才能实现,所以这次设定你的期望)。

最后,当我写这篇文章时,我意识到大多数人都想要iOS滑动行为;不幸的是,所述行为不是在Android上预先实现的(如在iOS上),你必须自己处理它;这不是不可能,也不是地球上最困难的任务在Android上做,但如果你对RecyclerView进行太多黑客攻击,会给你一些头痛。

更新

你现在已经意识到,ItemTouchHelper有一个问题。它直接在画布上绘制,因此它不知道布局、视图、边距等。这些都是存在于触摸助手领域之外的东西。帮助程序将获得画布和绘图功能,仅此而已。

这个画布尺寸从何而来? 嗯,它是在回收器视图及其视图的布局/测量通道期间计算的。

那么我该如何停止拖动"屏幕的正中央"呢?

将值传递给您的助手;请记住,计算屏幕中间位置的责任不在 TouchHelper 的合约中;但您的活动/片段确实知道这一点。提供触控帮助程序执行您希望它执行的操作所需的信息。

恢复"回到"原始位置,意味着知道初始状态是什么,等等。所有这些信息都是由RecyclerView及其他部门知道的,而不是TouchHelper知道的。

因此,您需要测量布局,保存一些值,将它们传递给触摸助手以便它可以运行,等等。

如您所见,全貌开始变得越来越复杂。我给你的建议是:

  1. 尝试将此功能推送出去,因为"平台不这样做需要时间,不值得"(滑动操作的价值和可发现性充其量是可疑的,但它现在是一个无处不在的操作,所以你可能不得不这样做无论如何)。
  2. 如果你真的必须这样做,尽可能多地抽象东西,创建你认为你需要的所有类/接口,即使你最终得到一个"MiddleScreenCalculatorDelegate"之类的东西。以后修复会更容易,但至少让每个组件做一个非常小的事情子集。

最后,您的项目触摸助手必须计算视图已经滑动了多少偏移量(增量),并在达到已知阈值时停止。

祝你好运:)

p.s.:我建议你发布一个不同的问题,其中包含特定问题以获得更好的帮助,这个答案是非常无益的。 :)

最新更新