-3

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

错误日志是

08-22 11:27:22.835: E/AndroidRuntime(5992): 致命异常: main 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): 在 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(ZygoteInit.java:551) 08-22 11:27:22.835: E/AndroidRuntime(5992 ):在 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 ): 在 com.nv.netmdapp1.ScheduleDailyView.onActivityCreated(ScheduleDailyView.java:89) 08-22 11:27:22.835: E/AndroidRuntime(5992): 在 android.support.v4.app.Fragment.performActivityCreated(Fragment.爪哇:1468)

Java 代码如下。

public void onActivityCreated(Bundle savedInstanceState) { // TODO 自动生成的方法存根 super.onActivityCreated(savedInstanceState); dailyFragment = (SherlockFragment) Fragment.instantiate(appContext, AppointmentDailyView.class.getName(),arguments); weekFragment=(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();
}

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

4

2 回答 2

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>

希望对你有帮助。。

于 2013-08-20T11:51:05.120 回答
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)

在这里检查什么是空的,您也可以通过处理配置更改来避免重新启动轮换活动。

于 2013-08-20T11:40:10.067 回答