gpt4 book ai didi

android - 为什么 Android O 失败并显示 "does not belong to this FragmentManager!"

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:31 25 4
gpt4 key购买 nike

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

在 Android O 模拟器上运行时,我的所有对话 fragment 现在都会失败:-

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)

我没有对任何代码进行任何更改。

Android O 发生了什么变化导致之前可以正常工作的 DialogFragments 现在无法显示?

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 Server VM by JetBrains s.r.o
Mac OS X 10.11.6

compileSdkVersion 'android-O'
buildToolsVersion "26.0.0-rc2"

AndroidManifest.xml
defaultConfig {
minSdkVersion 16
targetSdkVersion 'O'
}

compile 'com.android.support:appcompat-v7:26.0.0-beta1'
compile 'com.android.support:cardview-v7:26.0.0-beta1'
compile 'com.android.support:design:26.0.0-beta1'
compile 'com.android.support:percent:26.0.0-beta1'

dependencies {
classpath 'com.android.tools.build:gradle:3.0.0-alpha1'

}

最佳答案

对我来说,这不仅是 Android O 上的问题,也是旧版本上的问题。我测试的最旧版本是 API 级别 16。

我使用以下代码实例化我的 fragment :

MyFragment myFragment = MyFragment.newInstance();
myFragment.setTargetFragment(ParentFragment.this, 0);
myFragment.show(getActivity().getSupportFragmentManager(), null);

其中 ParentFragment.this 是扩展 android.support.v4.app.Fragment 的自定义类,MyFragment 也扩展此类,并且是 ParentFragment fragment 的子 fragment (因此得名)。

我认为我必须使用 SupportFragmentManager(getSupportFragmentManager() 方法),因为我使用的是支持包的 fragment ,因此我尝试调用 getActivity().getSupportFragmentManager() 来获取支持此方法的 Activity 引用。

但这似乎不是正确的方法。我将这些调用更改为:

MyFragment myFragment = MyFragment.newInstance();
myFragment.setTargetFragment(ParentFragment.this, 0);
myFragment.show(getFragmentManager(), null);

因此 fragment 自行决定使用哪个 FragmentManager,并且错误现在消失了。

希望这对某人有帮助。

关于android - 为什么 Android O 失败并显示 "does not belong to this FragmentManager!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49537936/

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