Фрагменты Android не сохраняют состояния, вылетает при повороте / блокировке экрана / назад - PullRequest
0 голосов
/ 20 марта 2012

У меня происходит сбой приложения, когда я блокирую экран, возвращаюсь назад, поворачиваю экран или нажимаю на домашний экран.В этом приложении реализован фрагментный интерфейс с 3 вкладками.В моем манифесте у меня есть android: configChanges = "direction", и это работало, пока я что-то не изменил (не помню, что это было).Теперь даже с этим в моем манифесте мое приложение не может обрабатывать изменения вращения.Я пытаюсь реализовать onSaveInstanceState, onRestoreInstanceState, onPause и onResume, но он продолжает падать.Вот часть кода:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Inflate the layout
    setContentView(R.layout.main);

    // Initialize the TabHost
    this.initializeTabHost(savedInstanceState);
    if (savedInstanceState != null) {
         // set the tab as per the saved state
        mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));
    }
    // Initialize ViewPager
    this.initializeViewPager();

}   

@Override
protected void onPause() {
    super.onPause();       
    }

 @Override
protected void onResume() {
super.onResume();         
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("tab",
            mTabHost.getCurrentTabTag()); // save the tab selected

}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    String myString = savedInstanceState.getString("tab");

}

LOGCAT для запуска приложения и сбоя

1 Ответ

2 голосов
/ 20 марта 2012
super.onSaveInstanceState(outState);
outState.putString("tab",
        mTabHost.getCurrentTabTag()); // save the tab selected

должно быть

outState.putString("tab",
        mTabHost.getCurrentTabTag()); // save the tab selected

super.onSaveInstanceState(outState);

Вам нужно добавить "tab" в outState перед вызовом onSaveInstanceState, чтобы избежать исключения при загрузке его в OnCreate. Другими словами, ваша «вкладка» фактически никогда не сохраняется, поскольку вы сохраняете состояние перед добавлением «вкладки» в состояние.

...