Android onSaveInstanceState导致应用程序崩溃

Android onSaveInstanceState导致应用程序崩溃,android,android-fragments,activity-lifecycle,Android,Android Fragments,Activity Lifecycle,我有一个带有一个主要活动的应用程序,这个活动有5个actionTab,每个actionTab包含一个片段,所以我也有5个片段 第一个片段只是显示单词hello 在第二个片段中,它只显示一些文本视图,以指示正在调用活动生命周期的哪个回调 第三个片段,在其布局中,它包含一个有3行的tablelayout,每行有一个image、TextView和一个edittext。当访问此选项卡中包含的片段时,当我旋转设备时,应用程序不会崩溃 只有当我访问第四个或第五个选项卡并旋转包含以下内容的设备时,应用程序才会

我有一个带有一个主要活动的应用程序,这个活动有5个actionTab,每个actionTab包含一个片段,所以我也有5个片段

第一个片段只是显示单词hello

在第二个片段中,它只显示一些文本视图,以指示正在调用活动生命周期的哪个回调

第三个片段,在其布局中,它包含一个有3行的tablelayout,每行有一个image、TextView和一个edittext。当访问此选项卡中包含的片段时,当我旋转设备时,应用程序不会崩溃

只有当我访问第四个或第五个选项卡并旋转包含以下内容的设备时,应用程序才会崩溃:

第四个和第五个选项卡分别具有三个线性布局和三个相对布局。第四个片段的主linearlayout垂直定向,三个嵌套linearlayout水平定向,每个都包含imageview、textview和edittext

第五个框架与第四个框架几乎相同,但它没有线性布局,而是具有相对的布局

注意:

第二个片段具有onSavedInstance方法,当应用程序在访问第四个或第五个片段时崩溃时,logcat会抱怨onSavedInstance,并生成下面发布的消息

我想知道为什么当我访问第四个片段或第五个片段并旋转设备时应用程序崩溃

日志:

11-02 20:48:29.699:E/AndroidRuntime22282:Process:com.example.viewpagerwithactiontabstest00,PID:22282 11-02 20:48:29.699:E/AndroidRuntime22282:java.lang.NullPointerException 11-02 20:48:29.699:E/AndroidRuntime22282:at com.example.viewpagerwithactiontabstest00.Aufgabe_2.onSaveInstanceStateAufgabe_2.java:142 11-02 20:48:29.699:E/AndroidRuntime22282:at-android.support.v4.app.Fragment.performSaveInstanceStateFragment.java:1647 11-02 20:48:29.699:E/AndroidRuntime22282:at android.support.v4.app.FragmentManagerImpl.saveFragmentBasicStateFragmentManager.java:1610

保存方法:


您的片段可能已创建,但尚未调用onCreateView。在这种情况下,您在onSaveInstanceState中还没有这个小部件


您可以考虑完全删除这个OnSaveStistChanStand,使用Android:FruteStEXT来确保该文本视图在配置更改中保留其文本。

看起来TV00是null,但是当我在第四或第五个片段时它为什么是空的,否则就不是空的?你是这个星球上唯一能回答这个问题的人,因为没有人知道您在哪里初始化tv00。tv_00在第二个片段中初始化,并在第二个片段布局中声明。tv_00 UI元素在xml文件中是否为其分配了唯一值?我尝试了您提供的解决方案,但应用程序仍然崩溃。我真的不知道为什么只有第4个和第5个片段会导致崩溃。如果用户显式地为小部件分配id,系统不能保证小部件的状态是持久的吗?如果附加了id,那么冻结文本仍然是必要的吗?@LetsAmrIt:我尝试了您提供的解决方案,但应用程序仍然崩溃-如果您没有onSaveInstanceState,它肯定无法在onSaveInstanceState中崩溃。@harikris:如果用户显式地为小部件分配id,系统难道不能保证小部件的状态保持不变吗?-默认情况下只有用户可变状态。因此EditText的文本保存到Bundle中,而不是TextView。android:freezesText为TextView提供了与EditText相同的内容保存功能。当然,我假设在这里确实需要保存这个状态——一个静态标签的TextView可以单独保存。
11-02 20:48:29.699: E/AndroidRuntime(22282): FATAL EXCEPTION: main
@Override
public void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub
    super.onSaveInstanceState(outState);

    outState.putString("TEXT", tv_00.getText().toString());
}