为了账号安全,请及时绑定邮箱和手机立即绑定

如何通知 RecyclerView 适配器内的计时器内的数据已更改

如何通知 RecyclerView 适配器内的计时器内的数据已更改

MMTTMM 2024-01-28 16:45:32
我有一个 RecyclerView,您可以在其中向左滑动项目以将其存档。它首先会显示撤消布局,然后 2 秒后它将被存档(现在,对于第一个测试,我只是删除该项目)。问题是,notifyItemRemoved(pos)从 Timer 线程使用会导致应用程序崩溃,表明只有创建视图的原始线程(UI 线程)才能触摸其视图。有什么技巧可以解决这个问题吗?我在 RecyclerView.Adapter 扩展类的 ViewHolder 中使用计时器。这是定时器的代码:archiveTimer.schedule(new TimerTask() {    @Override    public void run() {        notesController.remove(position);        notesList.remove(position);        queuedForArchive = false;    }}, 2000);在活动中,您可以使用 runOnUiThread 但我也不能使用它(函数MainActivity.runOnUiThread(Runnable)不是静态的,所以我不能在 MainActivity 之外使用它)
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

我发现了一种非常棘手的方法,可以在不使用计时器的情况下在 UI 线程上发生定时事件。我注意到所有动画师实际上都是定时的,你可以在任何你想要的动画师上实现 onAnimationEnd ,所以我制作了一个 ObjectAnimator ,将不可见视图的 alpha 从 1 更改为 1 (没有变化),并将其持续时间设置为我需要的 2000 毫秒。我使用了我想在该动画器的 onAnimationEnd() 内的计时器中使用的相同代码,并且它有效!所有代码都在 UI 线程上运行,对其他布局的更改不会造成任何崩溃!



查看完整回答
反对 回复 2024-01-28
  • 1 回答
  • 0 关注
  • 29 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信