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

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"



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值