我的应用程序中有五个选项卡,分别表示A,B,C,D和E.我的问题是,在将选项卡从B更改为任何其他选项卡并将设备旋转到横向模式或纵向模式时,应用程序停止了。
错误日志
08-22 11:27:22.835:E / AndroidRuntime(5992):致命异常:主要 08-22 11:27:22.835:E / AndroidRuntime(5992):java.lang.RuntimeException:无法启动活动ComponentInfo {com.nv.netmdapp1 / com.nv.netmdapp1.Home}:java.lang.NullPointerException 08-22 11:27:22.835:E / AndroidRuntime(5992):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 08-22 11:27:22.835:E / AndroidRuntime(5992):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 08-22 11:27:22.835:E / AndroidRuntime(5992):在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3351) 08-22 11:27:22.835:E / AndroidRuntime(5992):在android.app.ActivityThread.access $ 700(ActivityThread.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(ActivityThread.java:4424) 08-22 11:27:22.835:E / AndroidRuntime(5992):at java.lang.reflect.Method.invokeNative(Native Method) 08-22 11:27:22.835:E / AndroidRuntime(5992):at java.lang.reflect.Method.invoke(Method.java:511) 08-22 11:27:22.835:E / AndroidRuntime(5992):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784) 08-22 11:27:22.835:E / AndroidRuntime(5992):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 08-22 11:27:22.835:E / AndroidRuntime(5992):at dalvik.system.NativeStart.main(Native Method) 08-22 11:27:22.835:E / AndroidRuntime(5992):引起:java.lang.NullPointerException 08-22 11:27:22.835:E / AndroidRuntime(5992):at com.nv.netmdapp1.ScheduleDailyView.onActivityCreated(ScheduleDailyView.java:89) 08-22 11:27:22.835:E / AndroidRuntime(5992):在android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1468)
下面给出的Java代码。
public void onActivityCreated(Bundle savedInstanceState){ // TODO自动生成的方法存根 super.onActivityCreated(savedInstanceState); dailyFragment =(SherlockFragment)Fragment.instantiate(appContext,AppointmentDailyView.class.getName(),arguments); weeklyFragment =(SherlockFragment)Fragment.instantiate(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();
}
单击Tab C时,将执行此部分。但旋转设备控制时,将转到Tab B的onActivityCreated()。 这里空指针异常发生行ScheduleDailyView.java:89与Tab B.But相关联,而旋转设备控件则从选项卡C和D转到此文件。这是什么原因?
答案 0 :(得分:3)
在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>
希望对你有所帮助..
答案 1 :(得分:0)
旋转设备会再次重启您的应用:
调用OnActivityCreated方法,您将在此处获得空指针异常:
Caused by: java.lang.NullPointerException
08-20 16:54:43.319: E/AndroidRuntime(5646): at com.nv.netmdapp1.ScheduleDailyView.onActivityCreated(ScheduleDailyView.java:89)
在此处检查null是什么,也可以通过处理配置更改来避免重新启动旋转活动。