【发布时间】:2019-08-09 19:17:05
【问题描述】:
我有一个只使用一个活动的应用程序。在里面,我加载了一个带有 recyclerview 的片段。 recyclerview 中的每一项都是一个对话框片段。用户可以更改项目,因此当对话框关闭时,recyclerview 会更新。
我现在遇到的问题是,如果在对话框处于活动状态时旋转应用程序,则在对话框关闭后,recyclerview 将不会更新。
我的对话框在销毁时与应用程序中的所有内容一起重新创建,因此我怀疑dismisslistener 在重新创建时被销毁。
对话框公开了一个设置dismisslistener的方法,然后覆盖事件以检查是否设置了一个。
public void setOnDismissListener(DialogInterface.OnDismissListener
onDismissListener) {
this.onDismissListener = onDismissListener;
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (onDismissListener != null) {
onDismissListener.onDismiss(dialog);
}
}
然后我在 recyclerview 的onViewBindHolder 中设置了一个dismisslistener
editor.setOnDismissListener(dialog -> {
recycler.getAdapter().notifyDataSetChanged();
}
我不确定为什么会发生这种情况,但似乎在更改方向并重新创建所有内容后,recyclerview 从未更新。我发现该方法仍然被调用,因为在 ondismisslistener 内部是另一个函数,它使用 getView().findViewById() 更新了另一个视图,然后由于 getView 返回 null 而导致应用程序崩溃。
我在这里找不到任何其他关于此的帖子。
有谁知道我如何修复dismisslistener 或任何其他方式来等待dialogfragment 关闭?
【问题讨论】:
-
您从哪个方法调用 setOnDismissListener(...)?
-
@RafsanjaniYaahWaduudu 我在我的 recyclerview 类的
onBindViewHolder方法中调用它。 -
@IronMan 我看过了,但遗憾的是那里的答案似乎对我不起作用。
-
您能否从您的适配器和您的 recyclerview 的活动中发布更多代码