gpt4 book ai didi

android - 来自非 Ui 线程的 notifyItemRemoved() 在 recyclerview 中不起作用

转载 作者:行者123 更新时间:2023-11-29 01:05:13 25 4
gpt4 key购买 nike

我正在尝试从列表中删除项目和 notifyItemRemoved() 方法它不起作用它通过删除最后一个项目给出数组索引超出范围的异常,如果我从中间删除项目它也会删除非常它的下一项但是如果将代码放在线程之外它工作正常有我的代码

       Runnable runnable = new Runnable() {
@Override
public void run() {

int progress = 0;
ArrayList<MediaFileObject> selection = localDatabase.getAllMediaObjectsOfID(list.get(selectedAlbum).getId());
for (MediaFileObject obj : selection) {
if (searializeableTasks.isCancelled())
break;
localDatabase.moveMediaObjectToTrash(obj);
progress++;
if (searializeableTasks.isCancelled())
sendProgressToHandle(-101);
else
sendProgressToHandle(progress);
}
if (!searializeableTasks.isCancelled())
localDatabase.deleteAlbum(list.get(selectedAlbum).getId());

Handler handler = new Handler(getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {

list.remove(selectedAlbum);
savedAlbumAdapter.notifyItemRemoved(selectedAlbum);

}
});


}
};

searializeableTasks.startTasks(localDatabase.getAllMediaObjectsOfID(list.get(selectedAlbum).getId()).size(), runnable);

但是如果将所有这些代码放在主线程(类)中,它会按预期正常工作> 有人可以帮帮我吗?我的代码有什么问题?或者为什么它不能在单独的线程中工作?

最佳答案

在主线程上调用通知。

runOnUiThread(new Runnable() {
@Override
public void run() {
savedAlbumAdapter.notifyItemRemoved(selectedAlbum);
}
});

或者

 yourrecyclerView.post(new Runnable() {
@Override
public void run() {
savedAlbumAdapter.notifyItemRemoved(selectedAlbum);
}
});

关于android - 来自非 Ui 线程的 notifyItemRemoved() 在 recyclerview 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47789774/

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