相关疑难解决方法(0)

为什么Android O失败并且"不属于这个FragmentManager!"

我已将我的应用程序迁移到Android Studio 3中的Android O.

在Android O模拟器上运行我的所有dialogFragments现在都失败了: -

java.lang.IllegalStateException: Fragment MyDialogFragment{43ccf50 #2 MyDialogFragment} declared target fragment SettingsFragment{ceed549 #0 id=0x7f0f0142 android:switcher:2131689794:0} that does not belong to this FragmentManager!
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1316)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1624)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1689)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:794)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2470)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2260)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2213)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2122)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:746)
at android.os.Handler.handleCallback(Handler.java:769)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6535)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Run Code Online (Sandbox Code Playgroud)

我没有做任何代码更改.

以前工作的DialogFragments现在无法显示的Android O有什么变化?

Android Studio 3.0 Canary 1
Build #AI-171.4010489, built on May 15, 2017
JRE: 1.8.0_112-release-b736 x86_64
JVM: OpenJDK 64-Bit …
Run Code Online (Sandbox Code Playgroud)

android android-dialogfragment android-8.0-oreo

28
推荐指数
4
解决办法
1万
查看次数

是否有充分的理由将子片段管理器用于 DialogFragments?

通常,当从 Activity 显示 DialogFragment 时,您可以这样做:

MyDialogFragment myDialogFragment = MyDialogFragment.newInstance(args);             
myDialogFragment.show(getSupportFragmentManager(), MY_TAG);
Run Code Online (Sandbox Code Playgroud)

或者,如果您在 Fragment 中,则可以执行以下操作:

MyDialogFragment myDialogFragment = MyDialogFragment.newInstance(args);             
myDialogFragment.show(getActivity().getSupportFragmentManager(), MY_TAG);
Run Code Online (Sandbox Code Playgroud)

据我所知,这与第一个非常相似,因为它正在查找 Activity 然后从中调用。

然而,再一次,假设我们在一个 Fragment 中,通过这样做来启动一个 DialogFragment 是否有意义:

MyDialogFragment myDialogFragment = MyDialogFragment.newInstance(args);             
myDialogFragment.show(getChildFragmentManager(), MY_TAG);
Run Code Online (Sandbox Code Playgroud)

调用 Fragment 会被视为 DialogFragment 的父级吗?

android android-fragments android-dialogfragment fragmentmanager

5
推荐指数
1
解决办法
1737
查看次数