【发布时间】:2019-09-09 02:32:47
【问题描述】:
使用导航组件,Fragment 会打开一个DialogFragment,这可能会打开第二个DialogFragment。关闭第一个DialogFragment,也将关闭第二个。但是,我喜欢让第二个 DialogFragment 保持活跃,直到它自行关闭。
这可能符合预期。在我的情况下,它是一个打开自定义共享底页对话框的片段。点击项目后,底部工作表将被关闭。当一个项目被单击并且结果是持久的时,会显示一个加载对话框。加载对话框完成后会自行关闭。
所以,层次结构是:MainFragment - 共享 DialogFragment - 加载 DialogFragment。
我尝试使用全局操作而不是对话框到对话框操作导航到加载对话框,但这没有任何影响。
在共享底部表中使用(其父级)MainFragmentDiretions.action** 导致崩溃。不错,应该的。
解决方案是:
让
MainFragment打开加载对话框。我不喜欢 DialogFragments 取决于它的父级。在项目单击时隐藏共享底部工作表,并在加载对话框关闭时关闭。我也不喜欢这种依赖。
- 加载对话框的生命周期不依赖于共享底页。
如果关闭共享对话框,如何防止加载对话框被关闭,而不将更多责任转移给MainFragment?
【问题讨论】:
-
对话框创建另一个对话框是一个糟糕的设计,因此你正在与代码作斗争,解决设计问题,你不会与实现作斗争
-
真的吗?因为它不是实际的
Dialogs,所以它是DialogFragments,它是以对话框为主题的Fragments。 -
对话框通常是设计中的一个组件,如果这是 vanilla js,我们将讨论相同但引用警报方法,对于任何其他框架,我们将引用模态,类的名称无关紧要,成分相同。您正在实施一个糟糕的设计,而糟糕的设计正在带来一个麻烦的实施,解决设计问题,实施就会变得更容易。
标签: android kotlin android-architecture-navigation