gpt4 book ai didi

android - 在 Android Dialog fragment show() 方法的 TAG 参数中传递什么

转载 作者:行者123 更新时间:2023-12-03 14:52:51 24 4
gpt4 key购买 nike

希望你一切顺利。
我创建了一个对话框 fragment 并在实例上调用了 show()。我将自定义标签传递给 show() 的参数。该 fragment 不需要其他参数。
在配置更改、调整应用程序窗口大小时,应用程序崩溃。

     Caused by: android.view.InflateException: Binary XML file line #35 in com.signal.android.stage:layout/activity_main2: Binary XML file line #35 in com.signal.android.stage:layout/activity_main2: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #35 in com.signal.android.stage:layout/activity_main2: Error inflating class fragment
Caused by: java.lang.IllegalStateException: DialogFragment 0 doesn't exist in the FragmentManager
at androidx.navigation.fragment.DialogFragmentNavigator.onRestoreState(DialogFragmentNavigator.java:148)
这是 DialogFragmentNavigator.java 中的一个方法:
    @Override
public void onRestoreState(@Nullable Bundle savedState) {
if (savedState != null) {
mDialogCount = savedState.getInt(KEY_DIALOG_COUNT, 0);
for (int index = 0; index < mDialogCount; index++) {
DialogFragment fragment = (DialogFragment) mFragmentManager
.findFragmentByTag(DIALOG_TAG + index);
if (fragment != null) {
fragment.getLifecycle().addObserver(mObserver);
} else {
throw new IllegalStateException("DialogFragment " + index
+ " doesn't exist in the FragmentManager");
}
}
}
}
请注意,已经使用的 DIALOG_TAG 已被硬编码为“androidx-nav-fragment:navigator:dialog:”。因此,由于我提供了自定义 TAG,因此没有找到 Fragment 是有道理的。
客户调用 show() 方法的期望是什么?
应该传递什么标签来优雅地恢复 fragment ?
注意安全!

最佳答案

我对 mTag 所做的更改我的自定义字段DialogFragment当我尝试从后台恢复应用程序时,类触发了同样的崩溃。
从您发布的源代码中可以看出,tag字段由 DialogFragmentNavigator 设置和使用恢复状态时。它只是意味着您不能使用自定义标签。

public final class DialogFragmentNavigator extends Navigator<DialogFragmentNavigator.Destination> {
...
private static final String DIALOG_TAG = "androidx-nav-fragment:navigator:dialog:";
所以你应该硬编码前缀: show(... "androidx-nav-fragment:navigator:dialog:0")或使用库显示它: navigate(R.id.you_dialog_fragment_defined_in_nav_graph_xml)甚至可能 dismiss它是避免恢复过程的一种解决方法:
  override fun onPause() {
super.onPause()
dismiss()
}

关于android - 在 Android Dialog fragment show() 方法的 TAG 参数中传递什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63692210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com