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

问题描述 投票:0回答:1

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

java android android-recyclerview android-thread
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.