旋转android设备时应用程序已停止



我的应用程序中有五个选项卡,即A、B、C、D和E。我的问题是,在将选项卡从B更改为任何其他选项卡并将设备旋转到横向模式或纵向模式时,应用程序停止了。

错误日志为

08-22 11:27:22.835:E/AndroidRuntime(5992):致命异常:main08-22 11:27:22.835:E/AndroidRuntime(5992):java.lang.RuntimeException:无法启动活动ComponentInfo{com.nv.netmdapp1/com.nv.netmdapp1.Home}:java.lang.NullPointerException08-22 11:27:22.835:E/AndroidRuntime(5992):在android.app.ActivityThread.performLaunchActivity(ActivityThreads.java:1956)08-22 11:27:22.835:E/AndroidRuntime(5992):在android.app.ActivityThread.handleLaunchActivity(ActivityThreads.java:1981)08-22 11:27:22.835:E/AndroidRuntime(5992):在android.app.ActivityThread.handleRelaunchActivity(ActivityThreads.java:3351)08-22 11:27:22.835:E/AndroidRuntime(5992):在android.app.ActivityThread.access$700(ActivityThreads.java:123)08-22 11:27:22.835:E/AndroidRuntime(5992):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151)08-22 11:27:22.835:E/AndroidRuntime(5992):在android.os.Handler.dispatchMessage(Handler.java:99)08-22 11:27:22.835:E/AndroidRuntime(5992):在android.os.Looper.loop(Looper.java:137)08-22 11:27:22.835:E/AndroidRuntime(5992):在android.app.ActivityThread.main(ActivityThreads.java:4424)08-22 11:27:22.835:E/AndroidRuntime(5992):位于java.lang.reflect.Method.invokeNative(Native Method)08-22 11:27:22.835:E/AndroidRuntime(5992):在java.lang.reflect.Method.ioke(Method.java:511)08-22 11:27:22.835:E/AndroidRuntime(5992):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)08-22 11:27:22.835:E/AndroidRuntime(5992):在com.android.internal.os.ZygoteInit.main(ZygoteNit.java:551)08-22 11:27:22.835:E/AndroidRuntime(5992):在dalvik.system.NativeStart.main(Native方法)08-22 11:27:22.835:E/AndroidRuntime(5992):由java.lang.NullPointerException引起08-22 11:27:22.835:E/AndroidRuntime(5992):在com.nv.netmdapp1.ScheduleDailyView.onActivityCreated(ScheduleDailyView.java:89)08-22 11:27:22.835:E/AndroidRuntime(5992):在android.support.v4.app.Frage.performActivityCreated(Fragment.java:1468)

下面给出的Java代码。

ActivityCreated上的public void(Bundle savedInstanceState){//TODO自动生成的方法存根super.onActivityCreated(savedInstanceState);dailyFragment=(SherlockFragment)Fragment.instante(appContext,AppointmentDailyView.class.getName(),arguments);weeklyFragment=(SherlockFragment)Fragment.instante(appContext,AppointmentWeeklyView.class.getName(),arguments);

    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment lastFrag = getFragmentManager().findFragmentByTag("appointmentFrag");
    if(lastFrag!=null)
        ft.remove(lastFrag);
    ft.replace(R.id.ll_appointment_layout, dailyFragment);
    ft.commit();
}
@Override
public void onClick(View view) 
{
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    Fragment lastFrag = getFragmentManager().findFragmentByTag("appointmentFrag");
    if(lastFrag!=null)
        ft.remove(lastFrag);
    if(view==btnDaily)
        ft.replace(R.id.ll_appointment_layout, dailyFragment);
    else
        ft.replace(R.id.ll_appointment_layout, weeklyFragment);
    ft.commit();
}

单击选项卡C时,执行此部分。但在旋转设备时,控件转到选项卡B的onActivityCreated()。在这里,ScheduleDailyView.java:89行出现的空指针异常与选项卡B相关联。但是,在旋转设备控件时,将从选项卡C和D转到该文件。原因是什么?

在android清单中添加android:configChanges="orientation",它处理应用程序中的方向更改事件。

清单:

 <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" 
        android:configChanges="orientation"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
      </activity>

希望对你有所帮助。。

旋转设备会重新启动您的应用程序:

调用OnActivityCreated方法,您在这里得到一个空指针异常:

Caused by: java.lang.NullPointerException
08-20 16:54:43.319: E/AndroidRuntime(5646):     at com.nv.netmdapp1.ScheduleDailyView.onActivityCreated(ScheduleDailyView.java:89)

请检查此处为空的内容,还可以通过处理配置更改来避免在轮换时重新启动活动。

最新更新