Фрагмент setRetainInstance не работает (Android поддерживает lib)

Возможный дубликат:
Фрагменты Android setRetainInstance(true) не работает (библиотека поддержки Android)

Я написал простой тестовый проект, но не могу понять, почему всегда получаю saveInstanceState = null в методах жизненного цикла onCreate, onCreateView и onActivityCreated. Я меняю ориентацию экрана, вижу журнал, но состояние не сохраняется. Скажите пожалуйста, где моя ошибка. Благодарю. Код класса фрагмента:

public class TestFragment extends Fragment {

private String state = "1";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    if (savedInstanceState != null) {
        //never works
        state = savedInstanceState.getString("state");
    }
    //always prints 1
    Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show();
    return inflater.inflate(R.layout.fragment_layout, container, false);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("state", "2");
    Log.e("", "saved 2");
}

}

РЕДАКТИРОВАТЬ

Когда я пытаюсь использовать setRetainInstance, у меня снова нет результата (((Я меняю состояние на 2 с помощью btn1, но после изменения ориентации вижу 1 при нажатии на btn2. Помогите, пожалуйста (

открытый класс TestFragment extends Fragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    setRetainInstance(true);
    super.onCreate(savedInstanceState);
}

private String state = "1";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_layout, container, false);

    //button for changing state
    ((Button)view.findViewById(R.id.button1)).setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            state = "2";
        }
    });

    //button for showing state
    ((Button)view.findViewById(R.id.button2)).setOnClickListener(new View.OnClickListener() {
        public void onClick(View arg0) {
            Toast.makeText(getActivity(), state, Toast.LENGTH_SHORT).show();
        }
    });

    return view;
}

}

1 ответ

Я видел ту же проблему. Но вы можете сохранить состояние instate другим способом, благодаря методу setRetainInstance(true), все данные вашего класса сохраняются автоматически.

@Override
public void onCreate(Bundle savedInstanceState) {
    setRetainInstance(true);
    super.onCreate(savedInstanceState);
}

РЕДАКТИРОВАТЬ

Попробуйте также добавить эти параметры при объявлении своей деятельности:

    <activity
        android:name="MyActivity"
        android:configChanges="orientation|keyboardHidden|screenSize" />
Другие вопросы по тегам