Фрагмент 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" />