У меня есть эта операция, в которой я заменяю основной фрагмент фрагментом предпочтения. Когда я перехожу назад после просмотра настроек, я получаю пустую (белую) область, где должен находиться мой фрагмент. Если я поворачиваю экран, тогда он работает нормально. Все в моем фрагменте выглядит нормально, за исключением того, что оно пустое. Вот мои методы:Фрагмент пустой после popBackStack
Метод onCreate деятельности.
@Override
protected void onCreate(Bundle savedInstanceState) {
.....
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(MAIN_CONTAINER, new MainFragment())
.commit();
}
}
Отправной фрагмента предпочтения:
public void startPreferencesFragment() {
FragmentManager mFragmentManager = getFragmentManager();
FragmentTransaction mFragmentTransaction = mFragmentManager
.beginTransaction();
MyPreferencesFragment mPrefsFragment = new MyPreferencesFragment();
mFragmentTransaction.addToBackStack(null)
.replace(MAIN_CONTAINER, mPrefsFragment)
.commit();
}
onBackPressed моей деятельности:
@Override
public void onBackPressed() {
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
return;
}else {
super.onBackPressed();
}
}
Так что я делаю неправильно?
Спасибо.
EDIT: Если я открою настройки, а затем повернусь, а затем нажмите назад, все будет хорошо работать.
Также следует упомянуть, что удаление метода onBackPressed не устраняет проблему, оно просто выходит из приложения.
РЕДАКТИРОВАТЬ: Оказалось, что проблема не связана с палитрой. В основном мой фрагмент имеет recyclerview, и это все, что у него есть. Экземпляр адаптера, который я устанавливал в recyclerview, сохранялся, когда сам recyclerview был новым, когда фрагмент был возвращен из заднего стека, и я проверял, был ли адаптер равным нулю при его настройке.
Почему вы переопределили 'onBackPressed'? Суперкласс уже заботится о всплывающей транзакции в backstack – Blackbelt
Это то, что я продолжаю слышать, но если я этого не сделаю, приложение просто выйдет. – casolorz