首页 > 解决方案 > Dialog 和方向更改后更新 RecyclerView

问题描述

我有一个只使用一个活动的应用程序。在里面,我加载了一个带有 recyclerview 的片段。recyclerview 中的每一项都是一个对话框片段。用户可以更改项目,因此当对话框关闭时,recyclerview 会更新。

我现在遇到的问题是,当应用程序在对话框处于活动状态时旋转时,在对话框关闭后 recyclerview 将不会得到更新。

销毁时,我的对话框与应用程序中的所有内容一起重新创建,因此我怀疑解除监听器在重新创建时被销毁。

该对话框公开了一种设置解除侦听器的方法,然后覆盖该事件以检查是否已设置。

public void setOnDismissListener(DialogInterface.OnDismissListener 
onDismissListener) {
    this.onDismissListener = onDismissListener;
}

@Override
public void onDismiss(DialogInterface dialog) {
    super.onDismiss(dialog);
    if (onDismissListener != null) {
        onDismissListener.onDismiss(dialog);
    }
}

onViewBindHolder然后我在recyclerview的内部设置了一个dismisslistener

editor.setOnDismissListener(dialog -> {
    recycler.getAdapter().notifyDataSetChanged();
}

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

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

有谁知道我如何修复驳回侦听器或任何其他方式来等待对话片段关闭?

标签: javaandroid

解决方案


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


推荐阅读