0
我有一個工作線性RecyclerView
通過滑動刪除,一切都很好。 但是,當我嘗試使用Snackbar.Callback
創建「撤消」動作時,出現列表錯誤,如「無效索引」,該項目被刷掉,然後立即再次出現,甚至出現「不一致檢測」錯誤。任何人在代碼中看到奇怪的東西?使用Snackbar.Callback撤銷刪除操作
@Override
public void onSwiped(final RecyclerView.ViewHolder viewHolder, int direction) {
// item position
final int pos = viewHolder.getAdapterPosition();
communicator.remove(pos);
recyclerViewAdapter.notifyItemRemoved(pos);
Snackbar.make(view, R.string.notice_removed, Snackbar.LENGTH_LONG)
.setCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
switch (event) {
case Snackbar.Callback.DISMISS_EVENT_ACTION:
recyclerViewAdapter.notifyItemInserted(pos);
break;
default:
communicator.remove(pos);
break;
}
}
})
.setAction(R.string.action_undo, new View.OnClickListener() {
@Override
public void onClick(View v) {
// do nothing
}
})
.show();
recyclerViewAdapter.notifyItemRangeChanged(pos, recyclerViewAdapter.getItemCount());
}
嘿@Majid,'pos'在你的代碼貼出does not看起來那麼初始化如何'setTag(對象)'影響的代碼? – Frank
行@Frank,你說得對。我編輯了代碼。您必須在CallBack方法中使用'position'變量。 –
我需要在Snackbar回調方法中訪問它,以便IDE需要它是最終的。其他解決方案? – Frank