2012-02-01 4 views
7

Как удалить текущий и показать предыдущий фрагмент? Как, если я несколько раз нажать кнопку «Назад»Показать предыдущий фрагмент

Я использую такую ​​конструкцию:

FragmentManager fm=getFragmentManager(); 
FragmentTransaction ft=fm.beginTransaction(); 
ft.remove(fragment).commit(); 

Но он просто удаляет текущий фрагмент, не показывая предыдущий

ответ

13

Вы должны вызвать FragmentTransaction.addToBackStack(null) где вы добавляете фрагмент, а затем позвоните FragmentManager.popBackStack(), когда вы хотите его удалить.

+2

И если вы это сделаете, вам не придется переопределять поведение кнопки BACK. Видимый фрагмент будет автоматически удален, а следующий фрагмент в стопке будет показан автоматически, когда вы нажмете BACK. –

+0

Это не работает для меня, я использую библиотеку v4. –

+0

FragmentManager.popBackStack() перезагрузка фрагмента. –

4

Добавить этот метод в вашей деятельности:

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
      if(this.getFragmentManager().getBackStackEntryCount() != 0){ 
       this.getFragmentManager().popBackStack(); 
       return true; 
      } 
      // If there are no fragments on stack perform the original back button event 
     } 

     return super.onKeyDown(keyCode, event); 
    } 

Тогда где вы меняете фрагменты этого:

FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
transaction.replace(android.R.id.content, new YourFragmentName()); 
transaction.addToBackStack(null); // this is needed for the above code to work 
transaction.commit(); 
0

Попробуйте показать предыдущий фрагмент после REMOVE:

FragmentManager fm=getSupportFragmentManager(); 
    FragmentTransaction ft=fm.beginTransaction(); 
    ft.remove(fragment).commit(); 

    previousFragment=(SherlockFragment)getSupportFragmentManager() 
    .findFragmentByTag(""+currentTagNum); 
    getSupportFragmentManager().beginTransaction() 
      .show(mFragment) 
      .commit(); 
Смежные вопросы