java - 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 而导致应用程序崩溃。
我在这里找不到任何其他关于此的帖子。
有谁知道我如何修复驳回侦听器或任何其他方式来等待对话片段关闭?
解决方案
您是否已将 android:configChanges="orientation|screenSize" 添加到 AndroidManifest 中的活动中?否则尝试 (onRestoreInstanceState() 和 onSaveInstanceState()
推荐阅读
- powershell - 来自远程系统的 Powershell 中的本地管理员组
- javascript - 如何自动将数据从 json 文件传递到组件中?
- php - 通过 JSON 列的键加入在 MySQL 5.6 中给出错误但在 MySQL 8.0.19 中工作
- python - 如何在聚合字段中创建字典/对象/映射
- nlp - 如何通过无监督方法学习数据到文本 NLG 中的语义对齐?
- sqlite - SQLite - load_extension 切换问题
- reactjs - 在 React 中使用 useState 和 useEffect 的无限循环
- java - 如何在rest api java中实现最多3次尝试请求资源
- javascript - 移动设备上的绝对设备方向
- python - 如何通过networkx通过给出边缘顺序来绘制图形?