【问题标题】:Update RecyclerView after Dialog and orientation changeDialog 和方向更改后更新 RecyclerView
【发布时间】: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 的活动中发布更多代码

标签: java android


【解决方案1】:

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

【讨论】:

  • 这不会阻止应用程序转动吗?我希望应用程序转动。问题只是驳回听众迷路了。您能否具体说明“尝试onRestoreInstanceStateonSaveInstaceState”是什么意思?这些方法是存在的,但仅仅覆盖它们不会有太大的作用。
【解决方案2】:

好的,我发现出了什么问题。 重新创建时,对话框会丢失所有变量,就像其他所有内容一样。

理论上可以将这些变量保存在包中并在重新创建时再次获取它们,但我还没有找到使用 OnClickListener 执行此操作的方法,因为传递给包的对象必须是可序列化或可解析的。

因此,当我的对话没有任何变量时,我的对话现在通过 OnCreate 中的检查被解除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多