a.lang.RuntimeException: Unable to start activity ComponentInfo{com.hdj.hookmanager/com.hdj.hookmanager.ManagerAllUserActivity}: android.support.v4.app.Fragment$InstantiationException:
Unable to instantiate fragment com.hdj.hookmanager.fragment.DiviceFragmentTab: make sure class name exists, is public, and has an empty constructor that is public
E/AndroidRuntime(22471): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342)
E/AndroidRuntime(22471): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2404)
E/AndroidRuntime(22471): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3968)
E/AndroidRuntime(22471): at android.app.ActivityThread.access$900(ActivityThread.java:154)
E/AndroidRuntime(22471): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
E/AndroidRuntime(22471): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(22471): at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime(22471): at android.app.ActivityThread.main(ActivityThread.java:5290)
E/AndroidRuntime(22471): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(22471): at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(22471): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
E/AndroidRuntime(22471): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
E/AndroidRuntime(22471): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:165)
E/AndroidRuntime(22471): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.hdj.hookmanager.fragment.DiviceFragmentTab: make sure class name exists, is public, and has an empty constructor that is public
E/AndroidRuntime(22471): at android.support.v4.app.Fragment.instantiate(Fragment.java:431)
E/AndroidRuntime(22471): at android.support.v4.app.FragmentState.instantiate(Fragment.java:101)
E/AndroidRuntime(22471): at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1823)
E/AndroidRuntime(22471): at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:264)
E/AndroidRuntime(22471): at com.hdj.hookmanager.ManagerAllUserActivity.onCreate(ManagerAllUserActivity.java:43)
E/AndroidRuntime(22471): at android.app.Activity.performCreate(Activity.java:6039)
E/AndroidRuntime(22471): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
E/AndroidRuntime(22471): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
E/AndroidRuntime(22471): ... 12 more
E/AndroidRuntime(22471): Caused by: java.lang.InstantiationException: class com.hdj.hookmanager.fragment.DiviceFragmentTab has no zero argument constructor
E/AndroidRuntime(22471): at java.lang.Class.newInstance(Class.java:1597)
E/AndroidRuntime(22471): at android.support.v4.app.Fragment.instantiate(Fragment.java:420)
E/AndroidRuntime(22471): ... 19 more
E/AndroidRuntime(22471): Caused by: java.lang.NoSuchMethodException: <init> []
E/AndroidRuntime(22471): at java.lang.Class.getConstructor(Class.java:531)
E/AndroidRuntime(22471): at java.lang.Class.getDeclaredConstructor(Class.java:510)
E/AndroidRuntime(22471): at java.lang.Class.newInstance(Class.java:1595)
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次(在三星4.0设备上切横屏和竖屏都是执行一次,而并非这里说的有执行两次的情况);
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次;
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
注:上述描述是在Android3.2以前,如果缺少了keyboardHidden选项,不能防止Activity的销毁重启,也就不能执行onConfigurationChanged方法了。在3.2之后,必须加上screenSize属性才可以屏蔽调用Activity的生命周期(一些设备上可以不需要keyboardHidden,只要screenSize就可以了,保守起见还是继续保留keyboardHidden吧)。
E/AndroidRuntime(22471): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342)
E/AndroidRuntime(22471): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2404)
E/AndroidRuntime(22471): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3968)
E/AndroidRuntime(22471): at android.app.ActivityThread.access$900(ActivityThread.java:154)
E/AndroidRuntime(22471): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
E/AndroidRuntime(22471): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(22471): at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime(22471): at android.app.ActivityThread.main(ActivityThread.java:5290)
E/AndroidRuntime(22471): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(22471): at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(22471): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
E/AndroidRuntime(22471): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
E/AndroidRuntime(22471): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:165)
E/AndroidRuntime(22471): Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.hdj.hookmanager.fragment.DiviceFragmentTab: make sure class name exists, is public, and has an empty constructor that is public
E/AndroidRuntime(22471): at android.support.v4.app.Fragment.instantiate(Fragment.java:431)
E/AndroidRuntime(22471): at android.support.v4.app.FragmentState.instantiate(Fragment.java:101)
E/AndroidRuntime(22471): at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1823)
E/AndroidRuntime(22471): at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:264)
E/AndroidRuntime(22471): at com.hdj.hookmanager.ManagerAllUserActivity.onCreate(ManagerAllUserActivity.java:43)
E/AndroidRuntime(22471): at android.app.Activity.performCreate(Activity.java:6039)
E/AndroidRuntime(22471): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
E/AndroidRuntime(22471): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2295)
E/AndroidRuntime(22471): ... 12 more
E/AndroidRuntime(22471): Caused by: java.lang.InstantiationException: class com.hdj.hookmanager.fragment.DiviceFragmentTab has no zero argument constructor
E/AndroidRuntime(22471): at java.lang.Class.newInstance(Class.java:1597)
E/AndroidRuntime(22471): at android.support.v4.app.Fragment.instantiate(Fragment.java:420)
E/AndroidRuntime(22471): ... 19 more
E/AndroidRuntime(22471): Caused by: java.lang.NoSuchMethodException: <init> []
E/AndroidRuntime(22471): at java.lang.Class.getConstructor(Class.java:531)
E/AndroidRuntime(22471): at java.lang.Class.getDeclaredConstructor(Class.java:510)
E/AndroidRuntime(22471): at java.lang.Class.newInstance(Class.java:1595)
E/AndroidRuntime(22471): ... 20 more
解决办法 在Activity上添加:
<activity android:name="com.hdj.hookmanager.ManagerAllUserActivity"
android:configChanges="keyboardHidden|orientation|screenSize">
对android:configChanges的总结
1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次(在三星4.0设备上切横屏和竖屏都是执行一次,而并非这里说的有执行两次的情况);
2、设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次;
3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法。
注:上述描述是在Android3.2以前,如果缺少了keyboardHidden选项,不能防止Activity的销毁重启,也就不能执行onConfigurationChanged方法了。在3.2之后,必须加上screenSize属性才可以屏蔽调用Activity的生命周期(一些设备上可以不需要keyboardHidden,只要screenSize就可以了,保守起见还是继续保留keyboardHidden吧)。
Andorid 3.2以前的SDK可以使用如下配置
android:configChanges="orientation|keyboardHidden"
而Adnroid 3.2以后的SDK必须添加一个screenSize属性,具体如下
android:configChanges="keyboardHidden|orientation|screenSize"
或者
android:configChanges="orientation|screenSize"