У меня возникают проблемы с сохранением состояния экземпляра для фрагмента, когда я использую панель навигации (интерактивные изображения TableRow) для навигации по FragmentLayout, заменяя отображаемый фрагмент путем вызова метода .replace в диспетчере фрагментов.
Так как onSaveInstanceState активности хостинга не вызывается, как и фрагменты! И поскольку эти фрагменты не добавляются в задний стек, когда я изменяю фрагменты, они отключаются.
Я искал несколько способов привязать экземпляр состояния для этих фрагментов; сценарий - это editBox, который я хочу сохранить. Вот код для переключения между фрагментами:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getSupportFragmentManager();
if(savedInstanceState == null) {
HomeFragment homeFragment = new HomeFragment();
fragmentManager.beginTransaction().add(R.id.main_fragment, homeFragment).commit();
}
}
public void goToCaesar(View view){
Fragment currentFragment = fragmentManager.findFragmentById(R.id.main_fragment);
if(!(currentFragment instanceof CaesarFragment)) {
CaesarFragment caesarFragment = new CaesarFragment();
fragmentManager.beginTransaction()
.replace(R.id.main_fragment, caesarFragment).commit();
} else {
Toast.makeText(getApplicationContext(),"Caesar Nav Pressed",Toast.LENGTH_LONG).show();
}
}
goToCaesar - это действие, описываемое действием навигации, описанным в соответствующем файле *. xml. На самом деле это TableRow с кнопками изображений, использующими действия onClick , а не фактическую панель навигации.
При переключении он вызывает соответствующие обратные вызовы жизненного цикла ( onDestroy , onDetach et c,).
Как можно сохранить и повторно применить предыдущее состояние в этом случае?
Заранее спасибо.