猿问

对话框和方向更改后更新 RecyclerView

我有一个只使用一个活动的应用程序。在里面,我加载了一个带有 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);

    }

}

然后我在onViewBindHolderrecyclerview中设置了一个 dismisslistener


editor.setOnDismissListener(dialog -> {

    recycler.getAdapter().notifyDataSetChanged();

}

我不确定为什么会发生这种情况,但似乎在更改方向并重新创建所有内容之后,recyclerview 从未更新过。我发现该方法仍然被调用,因为在 ondismisslistener 内部是另一个函数,它更新了另一个视图,getView().findViewById()然后由于返回 null 而使应用程序崩溃getView。


我在这里找不到关于此的任何其他帖子。


有谁知道我如何修复 dismisslistener 或任何其他等待 dialogfragment 关闭的方法?


德玛西亚99
浏览 111回答 2
2回答

月关宝盒

您是否已将 android:configChanges="orientation|screenSize" 添加到 AndroidManifest 中的活动中?否则尝试 (onRestoreInstanceState() 和 onSaveInstanceState()

慕的地10843

好吧,我发现出了什么问题。重新创建时,对话框会丢失所有变量,就像其他所有内容一样。理论上可以将这些变量保存在包中并在重新创建时再次获取它们,但我还没有找到使用 OnClickListener 执行此操作的方法,因为传递给包的对象必须是可序列化或可解析的。因此,通过检查 OnCreate,当对话没有任何变量时,我的对话现在就被取消了。
随时随地看视频慕课网APP

相关分类

Java
我要回答