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