我有一个RecyclerView,您可以在其中滑动左侧的项目以将其存档。它会首先显示撤消布局,然后在2秒钟后将其存档(现在进行第一次测试,我只是删除了该项目)。问题是从Timer线程使用notifyItemRemoved(pos)
会使应用程序崩溃,并说只有创建视图的原始线程(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之外使用它)
答案 0 :(得分:0)
我发现了一种非常棘手的方法,可以在不使用计时器的情况下在UI线程上发生定时事件。我注意到所有动画师实际上都是定时的,您可以在想要的任何动画师上添加onAnimationEnd,所以我制作了一个ObjectAnimator,将不可见视图的alpha从1更改为1(不更改),并将其持续时间设置为所需的2000ms。我使用了想要在该Animator的onAnimationEnd()内的计时器中使用的相同代码,并且可以正常工作!所有代码都在UI线程上运行,并且更改其他布局不会造成任何崩溃!