猿问

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

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


MMTTMM
浏览 83回答 1
1回答

慕无忌1623718

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

相关分类

Java
我要回答