如何通知RecyclerView适配器内部的Timer中的数据已更改

时间:2019-11-01 22:34:18

标签: java android android-recyclerview android-thread

我有一个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之外使用它)

1 个答案:

答案 0 :(得分:0)

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