2015-02-27 7 views
2

У меня есть эта операция, в которой я заменяю основной фрагмент фрагментом предпочтения. Когда я перехожу назад после просмотра настроек, я получаю пустую (белую) область, где должен находиться мой фрагмент. Если я поворачиваю экран, тогда он работает нормально. Все в моем фрагменте выглядит нормально, за исключением того, что оно пустое. Вот мои методы:Фрагмент пустой после 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 был новым, когда фрагмент был возвращен из заднего стека, и я проверял, был ли адаптер равным нулю при его настройке.

+0

Почему вы переопределили 'onBackPressed'? Суперкласс уже заботится о всплывающей транзакции в backstack – Blackbelt

+1

Это то, что я продолжаю слышать, но если я этого не сделаю, приложение просто выйдет. – casolorz

ответ

3

Вы уже добавляете транзакцию в backstack, нет необходимости переопределять ; рамка автоматически вытащит Fragment из стека при нажатии кнопки «Назад». Я почти уверен, что вы «удваиваете», выталкивая заднюю часть.

+0

Я пробовал это без этого, а затем приложение просто выходит. Я также должен был упомянуть, что если я открою экран настроек, а затем поверните его, кнопка «Назад» будет работать нормально. – casolorz

+0

, если вы удалите 'fm.popBackStack();' это работает? – Emmanuel

+0

Если я делаю это на точный код, который означает, что 'super.onBackPressed()' никогда не вызывается, тогда ничего не происходит вообще. – casolorz

Смежные вопросы