我如何通知 RecyclerView Adapter 内的 Timer 数据已更改
How can I inform the RecyclerView that data has changed from within a Timer inside the Adapter
我有一个 RecyclerView,您可以在其中向左滑动项目以将其归档。它会首先显示撤消布局,然后在 2 秒后将其存档(现在对于第一次测试,我只是删除该项目)。问题是,从计时器线程使用 notifyItemRemoved(pos)
会使应用程序崩溃,表示只有创建视图的原始线程(UI 线程)才能触及它的视图。有什么技巧可以解决这个问题吗?我在 RecyclerView.Adapter extended class.
的 ViewHolder 中使用计时器
定时器代码如下:
archiveTimer.schedule(new TimerTask() {
@Override
public void run() {
notesController.remove(position);
notesList.remove(position);
queuedForArchive = false;
}
}, 2000);
在活动中你可以使用 runOnUiThread 但我也不能使用它(函数 MainActivity.runOnUiThread(Runnable)
不是静态的所以我不能在 MainActivity 之外使用它)
我发现了一种非常棘手的方法,可以在不使用计时器的情况下在 UI 线程上发生定时事件。我注意到所有的动画师实际上都是定时的,你可以在任何你想要的动画师上实现 onAnimationEnd,所以我制作了一个 ObjectAnimator,它将不可见视图的 alpha 从 1 更改为 1(无变化)并将其持续时间设置为我需要的 2000 毫秒。我使用了我想在该 Animator 的 onAnimationEnd() 内的计时器中使用的相同代码,并且它有效!!!所有代码都在 UI 线程上 运行 并且对其他布局的更改没有造成任何崩溃!
我有一个 RecyclerView,您可以在其中向左滑动项目以将其归档。它会首先显示撤消布局,然后在 2 秒后将其存档(现在对于第一次测试,我只是删除该项目)。问题是,从计时器线程使用 notifyItemRemoved(pos)
会使应用程序崩溃,表示只有创建视图的原始线程(UI 线程)才能触及它的视图。有什么技巧可以解决这个问题吗?我在 RecyclerView.Adapter extended class.
定时器代码如下:
archiveTimer.schedule(new TimerTask() {
@Override
public void run() {
notesController.remove(position);
notesList.remove(position);
queuedForArchive = false;
}
}, 2000);
在活动中你可以使用 runOnUiThread 但我也不能使用它(函数 MainActivity.runOnUiThread(Runnable)
不是静态的所以我不能在 MainActivity 之外使用它)
我发现了一种非常棘手的方法,可以在不使用计时器的情况下在 UI 线程上发生定时事件。我注意到所有的动画师实际上都是定时的,你可以在任何你想要的动画师上实现 onAnimationEnd,所以我制作了一个 ObjectAnimator,它将不可见视图的 alpha 从 1 更改为 1(无变化)并将其持续时间设置为我需要的 2000 毫秒。我使用了我想在该 Animator 的 onAnimationEnd() 内的计时器中使用的相同代码,并且它有效!!!所有代码都在 UI 线程上 运行 并且对其他布局的更改没有造成任何崩溃!