Search code examples
javaandroidsdkbuild-toolsandroid-version

Unable to start activity ComponentInfo{...} after installing Android SDK Build-Tools 26


I upgraded Android Studio to 2.3.3

and then I installed Android SDK Build-Tools 26

and Android 8.0 (O)

and set compileSdkVersion and targetSdkVersion on 26

and buildToolsVersion on "26.0.0"

and then I changed all the libraries version from 25.3.1 to 26.0.0-alpha1

Now I have the below RunTime Exception:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mysite.myapp/com.mysite.myapp.MainActivity}: android.view.InflateException: Binary XML file line #35: Error inflating class fragment at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2480) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1377) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:155) at android.app.ActivityThread.main(ActivityThread.java:5725) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1030) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:825) Caused by: android.view.InflateException: Binary XML file line #35: Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:414) at android.view.LayoutInflater.inflate(LayoutInflater.java:365) at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) at com.mysite.myapp.MainActivity.onCreate(MainActivity.java:65) at android.app.Activity.performCreate(Activity.java:6018) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2370) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2480)  at android.app.ActivityThread.access$800(ActivityThread.java:151)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1377)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:155)  at android.app.ActivityThread.main(ActivityThread.java:5725)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1030)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:825)  Caused by: java.lang.IllegalArgumentException: Setting FragmentDrawer{28990c1 #0 id=0x7f0f0095} as the target of FragmentDrawer{28990c1 #0 id=0x7f0f0095} would create a target cycle at android.support.v4.app.Fragment.setTargetFragment(Fragment.java:636) at com.mysite.myapp.Fragments.FragmentDrawer.onCreate(FragmentDrawer.java:83) at android.support.v4.app.Fragment.performCreate(Fragment.java:2226) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1502) at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1737) at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:3512) at android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120) at android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:330) at android.support.v4.app.BaseFragmentActivityApi14.onCreateView(BaseFragmentActivityApi14.java:39) at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:75) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)  at android.view.LayoutInflater.inflate(LayoutInflater.java:504)  at android.view.LayoutInflater.inflate(LayoutInflater.java:414)  at android.view.LayoutInflater.inflate(LayoutInflater.java:365)  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289)  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)  at com.mysite.myapp.MainActivity.onCreate(MainActivity.java:65)  at android.app.Activity.performCreate(Activity.java:6018)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2370)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2480)  at android.app.ActivityThread.access$800(ActivityThread.java:151)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1377)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:155)  at android.app.ActivityThread.main(ActivityThread.java:5725)  at java.lang.reflect.Method.invoke(Native Method)  at java.lang.reflect.Method.invoke(Method.java:372)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1030)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:825) 

the (MainActivity.java:65) and (FragmentDrawer.java:83) are displayed as link.

MainActivity.java:65 content:

setContentView(R.layout.activity_main);

FragmentDrawer.java:83 content:

setTargetFragment(FragmentDrawer.this, 100);

before MainActivity there is a SplashActivity and it runs without any problem!

I've just downgraded SDK Build-Tools, compileSdkVersion, targetSdkVersion, buildToolsVersion and libraries version to run again and test. there is no problem using previews versions.

Can anyone help me? How can I run my App using new SDK Version?


Solution

  • The problem is here:

    java.lang.IllegalArgumentException:
    Setting FragmentDrawer{28990c1 #0 id=0x7f0f0095} as the target of
    FragmentDrawer{28990c1 #0 id=0x7f0f0095} would create a target cycle
    at android.support.v4.app.Fragment.setTargetFragment(Fragment.java:636)
    

    setTargetFragment has changed in 26.0.0. Before, it simply set the target fragment plus request code. From 26.0.0 onwards, it contains two checks before doing that:
    - it checks whether the current fragment and the target fragment belong to the same fragment manager
    - it checks whether setting the target fragment would create a loop, by scanning the list of target fragments in this fragment and see if the target fragment is already there.

    So somehow you are setting a target fragment that you set before. That is no longer allowed.