我已将我的应用程序迁移到 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,并且错误现在消失了。

希望这对某人有帮助。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!