リストからアイテムを削除しようとしていますが、notifyItemRemoved()
メソッドは動作しません。最後のアイテムを削除して配列のインデックスを外してしまいます。それに非常に次の項目を削除しますが、スレッドの外 その作業罰金をコードを置けば私のコードnotifyからのnotifyItemRemoved()はrecyclerviewで機能していないスレッド
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);
しかし、もし私が私を入れています予想通り、メインスレッド(クラス)その作業罰金内のすべてのコードを置くがありますここにコードしてください私は自分のカスタム進捗ダイアログを完成した後に表示したいと思っています。RecyclerView
誰かが私を助けてくれますか?私のコードで何が間違っていますか?なぜ別のスレッドで動かないのですか?
'notifyDataSetChanged();'のみを使用して動作します。 – Dharmishtha
現在、私はこれをやっています 'Handler handler = new Handler(Looper.getMainLooper()); (); list.clear(); list.clear(); list.clear();リストを削除します。 notifyDataSetChanged()に対してnotifyItemXメソッドを使用する方が良いです。addAll(localDatabase.getAllAlbums()); savedAlbumAdapter.notifyDataSetChanged();}}); ' –