我有一个只使用一个活动的应用程序。在里面,我加载了一个带有 recyclerview 的片段。recyclerview 中的每个项目都是一个对话框片段。用户可以更改项目,因此当对话框关闭时,recyclerview 会更新。我现在遇到的问题是,当应用程序在对话框处于活动状态时旋转时,recyclerview 在对话框关闭后不会更新。我的对话框在被销毁时会与应用程序中的所有内容一起重新创建,因此我怀疑 dismisslistener 在重新创建时会被销毁。该对话框公开了一种方法来设置 dismisslistener,然后覆盖该事件以检查是否已设置。public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) { this.onDismissListener = onDismissListener;}@Overridepublic void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); if (onDismissListener != null) { onDismissListener.onDismiss(dialog); }}然后我在onViewBindHolderrecyclerview中设置了一个 dismisslistenereditor.setOnDismissListener(dialog -> { recycler.getAdapter().notifyDataSetChanged();}我不确定为什么会发生这种情况,但似乎在更改方向并重新创建所有内容之后,recyclerview 从未更新过。我发现该方法仍然被调用,因为在 ondismisslistener 内部是另一个函数,它更新了另一个视图,getView().findViewById()然后由于返回 null 而使应用程序崩溃getView。我在这里找不到关于此的任何其他帖子。有谁知道我如何修复 dismisslistener 或任何其他等待 dialogfragment 关闭的方法?
2 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
您是否已将 android:configChanges="orientation|screenSize" 添加到 AndroidManifest 中的活动中?否则尝试 (onRestoreInstanceState() 和 onSaveInstanceState()
慕的地10843
TA贡献1785条经验 获得超8个赞
好吧,我发现出了什么问题。重新创建时,对话框会丢失所有变量,就像其他所有内容一样。
理论上可以将这些变量保存在包中并在重新创建时再次获取它们,但我还没有找到使用 OnClickListener 执行此操作的方法,因为传递给包的对象必须是可序列化或可解析的。
因此,通过检查 OnCreate,当对话没有任何变量时,我的对话现在就被取消了。
添加回答
举报
0/150
提交
取消