当前位置: 首页 > 知识库问答 >
问题:

每次移除项目时,RecyclerView last item会闪烁

张丁雷
2023-03-14

我使用了一个带有RecyclerView的光标加载器,除了每次从RecyclerView中移除一个项目时,最后一个项目会闪烁,如下所示

最后一项闪烁

我的删除代码是

public void deleteData(long id){
    Uri uri = ContentUris.withAppendedId(URI, id);
    getContentResolver().delete(uri, null, null);
}
deleteData(viewHolder.getItemId());
recyclerView.getItemAnimator().setChangeDuration(0);

((DefaultItemAnimator) recyclerViewObject.getItemAnimator()).setSupportsChangeAnimations(false);

但这些都不奏效,更不用说我真的希望动画能奏效。

编辑:断点上载:

onCreate:

“main@4668”prio=5 tid=0x2 nid=na可运行html" target="_blank">java.lang.thread.state:可在com.jackz314.todo.historyactivity.onCreateLoader(historyactivity.java:803)在android.support.v4.app.loadermanagerimpl.createLoader(loadermanager.java:539)在android.support.v4.app.loadermanagerimpl.createandInstallLoader(loadermanager.java:548)在ndroid.app.activitythread$H.HandleMessage(activitythread.java:1593)
在android.os.handler.dispatchMessage(handler.java:105)在android.os.looper.loop(looper.java:164)在android.app.activitythread.main(activitythread.java:6541)在java.lang.reflect.method.invoke(method.java:-1)在com.android.internal.os.zygote

onDelete(删除项目):

“main@4668”prio=5 tid=0x2 nid=na runnable java.lang.thread.state:runnable在com.jackz314.todo.historyactivity.deleteData(historyactivity.java:791)在com.jackz314.todo.historyactivity.deleteData(historyactivity.java:791)在com.jackz314.todo.historyactivity.4。onswiped(historyactivity.java:434)在

希望有帮助

编辑:经过一些调查,我发现最后一个项目实际上并没有闪烁,似乎RecolyerView首先改变了它的长度/大小,切断了一个与已删除项目大小相等的部分(删除),使最后一个项目(取决于已删除项目的大小)暂时不可见,然后RecolyerView删除了一开始应该删除的项目。我还在搞定,想弄清楚是因为我在什么地方搞乱了顺序,还是别的什么原因。

共有1个答案

步联
2023-03-14

终于搞定了!

又一个愚蠢的错误,一点也不复杂,我一直在想,为什么我只在这次活动上有这个问题,但不是我以前的,我突然意识到这两个活动的布局是不一样的,结果是我将recyclerView的高度设置为wrap_content,所以我想发生的是,布局告诉系统将内容包装在RecolyerView中,当您删除一个项目时,技术上它已经不在那里了,所以,即使我为删除的项目制作了动画,该项目也会立即从布局的级别上删除,这就是为什么似乎Android首先调整了RecolyerView的高度,然后删除该项目,实际发生的是,由于RecolyerView被设置为Wrap_Content,它会在删除后立即删除视图(项目)的位置,而不是在动画之后,这就是为什么它看起来像是一眨眼。

无论如何,解决方案只是简单地将RecolyerView的高度从Wrap_Content更改为任何其他值,如果您像我一样使用ConstraintLayout,只需将高度更改为0dp,然后将RecolyerView约束为其他值或边缘。

感谢每一个试图帮助我解决问题的人,我承认这是我遇到过的最愚蠢但也最令人沮丧的问题之一。

我相信其他人也遇到了同样的问题,所以去检查一下高度是否设置为wrap_content

 类似资料:
  • 问题内容: 我想从中删除一个项目,但是我不知道该怎么做。 这是我的代码… 我想删除一个项目,指导我执行此操作。 问题答案: 如果您不想显示项目0,只需调整其大小并更改for循环即可: 如果您想在应用程序运行时删除项目,建议您使用a 而不是a :

  • 我的购物车有两个功能,第一个是退货总价和商品总数量: 这两个函数返回这两个参数: 和: 我可以通过此功能销毁所有购物车会话: 如何删除特定购物车项目?我在使用这个方法,它的工作。但它不会改变总价和总数量:

  • 我有一个JavaFX项目,它使用Hibernate ORM和Maven。每次运行项目时,我都要等待很长时间才能运行,因为Maven一直在解包Hibernate依赖项。这是必要的吗?或者我可以关掉它,为什么要一遍又一遍地打开所有东西而不是只打开一次?日志如下所示: 我的POMfile看起来是这样的: 谢谢你!

  • 迁移数据库ORM层 迁移模板Blade 迁移分页 迁移验证器 迁移Cache

  • 数据库 模板类 验证器 缓存类

  • 我有一个pom。依赖项/插件的xml文件错误。每次我添加新的依赖项时,它都会给出与版本相关的错误。目前,它给出了与Eureka服务器相关的错误。 在pom.xml中添加Eureka命名服务器依赖项后的错误消息 项目生成错误:“依赖项”。附属国。组织版。springframework。云:Spring的云启动器尤里卡:罐子不见了。 pom.xml文件: