android带fragment的Viewpager旋转屏幕时异常退出

    xiaoxiao2026-04-08  3

    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)

    E/AndroidRuntime(22471):        ... 20 more

    解决办法 在Activity上添加:

    <activity android:name="com.hdj.hookmanager.ManagerAllUserActivity"             android:configChanges="keyboardHidden|orientation|screenSize">

    使Android横竖屏切换时不销毁当前activity

    对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"

    转载请注明原文地址: https://ju.6miu.com/read-1308611.html
    最新回复(0)