У меня есть actviity, который загружает фрагмент в onCreate следующим образом:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadFragment(new FragmentName());
}
private void loadFragment(Fragment fragment) {
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
// replace the FrameLayout with new Fragment
fragmentTransaction.replace(R.id.frag_lay, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
И я пытаюсь сохранить и восстановить состояние загруженного фрагмента следующим образом:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
spinner.setSelection(savedInstanceState.getInt("spinner"));
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("spinner", spinner.getSelectedItemPosition());
}
Что происходит, так это то, что я правильно сохраняю положение моего счетчика, но в любом случае счетчик воссоздается, и его положение является значением по умолчанию, хотя я выбираю сохраненный.Я не совсем уверен, почему это происходит, кто-нибудь может помочь?
РЕДАКТИРОВАТЬ
Я настраиваю счетчик здесь:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_campus, container, false);
...
setupSpinner();
return view;
}
private void setupSpinner() {
ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(this.getActivity(),
R.array.array_spinner,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter)
}
РЕДАКТИРОВАТЬ 2
Я сделал еще несколько попыток.Я поставил несколько тостов, чтобы отобразить, что происходило так:
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
Toast toast = Toast.makeText(getActivity(), "saved !=", Toast.LENGTH_SHORT);
toast.show();
}else{
Toast toast = Toast.makeText(getActivity(), "saved ==", Toast.LENGTH_SHORT);
toast.show();
}
}
Когда я пытался запустить этот код на эмуляторе, это происходит: когда я впервые запускаю приложение, оно идет в операторе else (который должен бытьправо).Когда я меняю ориентацию, отображаются оба тоста (очевидно, я сначала что-то сохранил в onSaveInstanceState), и это неправильно.Почему это происходит?