我有一个 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 线程上运行,对其他布局的更改不会造成任何崩溃!
添加回答
举报
0/150
提交
取消