gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:10:10 25 4
gpt4 key购买 nike

我有一个 RecyclerView,您可以在其中向左滑动项目以将其存档。它首先会显示撤消布局,然后 2 秒后它将被存档(现在,对于第一个测试,我只是删除该项目)。问题是,从 Timer 线程使用 notifyItemRemoved(pos) 会使应用程序崩溃,表明只有创建 View 的原始线程(UI 线程)才能触摸其 View 。有什么技巧可以解决这个问题吗?我在 RecyclerView.Adapter 扩展类的 ViewHolder 中使用计时器。

这是计时器的代码:

archiveTimer.schedule(new TimerTask() {
@Override
public void run() {
notesController.remove(position);
notesList.remove(position);
queuedForArchive = false;
}
}, 2000);

在 Activity 中,您可以使用 runOnUiThread,但我也不能使用它(函数 MainActivity.runOnUiThread(Runnable) 不是静态的,因此我无法在 MainActivity 之外使用它)

最佳答案

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

关于java - 如何通知 RecyclerView 适配器内的计时器内的数据已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58666624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com