首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android RecyclerView ItemTouchHelper恢复滑动和恢复视窗

Android RecyclerView ItemTouchHelper恢复滑动和恢复视窗
EN

Stack Overflow用户
提问于 2015-08-03 20:28:02
回答 9查看 32.6K关注 0票数 71

在滑动完成并在ItemTouchHelper.Callback实例上调用onSwiped之后,有没有一种方法可以恢复滑动操作并将视图定位符恢复到其初始位置?我让RecyclerViewItemTouchHelperItemTouchHelper.Callback实例完美地协同工作,我只需要还原swipe动作,在某些情况下not remove被滑动的项目。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2015-08-23 01:59:06

经过一些随机的尝试,我找到了一个解决方案。在您的适配器上调用notifyItemChanged。这将使刷出的视图动画回到其原始位置。

票数 133
EN

Stack Overflow用户

发布于 2018-01-02 16:34:30

您应该在ItemTouchHelper.Callback中重写onSwiped方法并刷新该特定项。

代码语言:javascript
复制
 @Override
 public void onSwiped(RecyclerView.ViewHolder viewHolder,
     int direction) {
     adapter.notifyItemChanged(viewHolder.getAdapterPosition());
 }
票数 34
EN

Stack Overflow用户

发布于 2015-08-07 15:51:12

谷歌的ItemTouchHelper实现假设每个刷出的项目最终都会从回收器视图中删除,而在某些应用程序中可能并非如此。

RecoverAnimationItemTouchHelper中的一个嵌套类,用于管理滑动/拖动项目的触摸动画。虽然名称暗示它只恢复项目的位置,但它实际上是唯一一个用于恢复(取消滑动/拖动) replace (滑动时移出或拖动时替换)项目的类。奇怪的名字。

RecoverAnimation中有一个名为mIsPendingCleanup的布尔型属性,ItemTouchHelper使用它来判断项目是否等待删除。因此,在将RecoverAnimation附加到项目之后,ItemTouchHelper会在成功移出后设置此属性,并且只要设置了此属性,动画就不会从恢复动画列表中删除。问题是,将始终为刷出的项目设置mIsPendingCleanup,导致该项目的RecoverAnimation永远不会从动画列表中删除。因此,即使你在成功滑动后恢复了项目的位置,只要你触摸它,它就会被送回被刷出的位置-因为RecoverAnimation将导致动画从最新的被刷出的位置开始。

不幸的是,解决方案是将ItemTouchHelper类源代码复制到与support库中相同的包中,并从RecoverAnimation类中删除mIsPendingCleanup属性。我不确定这是否被谷歌接受,我还没有在Play Store上发布更新,看看它是否会导致拒绝,但你可以在https://gist.github.com/kukabi/f46e1c0503d2806acbe2找到支持库v22.2.1的类源代码,上面提到的修复。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31787272

复制
相关文章

相似问题

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