我的应用程序中有五个选项卡,即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)
请检查此处为空的内容,还可以通过处理配置更改来避免在轮换时重新启动活动。