我有一個 RecyclerView,您可以在其中向左滑動項目以將其存檔。它首先會顯示撤消布局,然后 2 秒后它將被存檔(現(xiàn)在,對于第一個測試,我只是刪除該項目)。問題是,notifyItemRemoved(pos)從 Timer 線程使用會導(dǎo)致應(yīng)用程序崩潰,表明只有創(chuàng)建視圖的原始線程(UI 線程)才能觸摸其視圖。有什么技巧可以解決這個問題嗎?我在 RecyclerView.Adapter 擴展類的 ViewHolder 中使用計時器。這是定時器的代碼:archiveTimer.schedule(new TimerTask() { @Override public void run() { notesController.remove(position); notesList.remove(position); queuedForArchive = false; }}, 2000);在活動中,您可以使用 runOnUiThread 但我也不能使用它(函數(shù)MainActivity.runOnUiThread(Runnable)不是靜態(tài)的,所以我不能在 MainActivity 之外使用它)
1 回答

慕無忌1623718
TA貢獻1744條經(jīng)驗 獲得超4個贊
我發(fā)現(xiàn)了一種非常棘手的方法,可以在不使用計時器的情況下在 UI 線程上發(fā)生定時事件。我注意到所有動畫師實際上都是定時的,你可以在任何你想要的動畫師上實現(xiàn) onAnimationEnd ,所以我制作了一個 ObjectAnimator ,將不可見視圖的 alpha 從 1 更改為 1 (沒有變化),并將其持續(xù)時間設(shè)置為我需要的 2000 毫秒。我使用了我想在該動畫器的 onAnimationEnd() 內(nèi)的計時器中使用的相同代碼,并且它有效!所有代碼都在 UI 線程上運行,對其他布局的更改不會造成任何崩潰!
添加回答
舉報
0/150
提交
取消