2016-04-10 6 views
2

У меня есть фрагменты, которые будут заменены следующим методом. Я думаю, что что-то не так с моим кодом, потому что я хочу предотвратить добавление нескольких фрагментов в задний стек. Если я дважды нажму на фрагмент B, все экземпляры будут добавлены в задний стек, и кнопка возврата будет передана через два созданных экземпляра.Фрагменты Android - удалить фрагмент из предыдущего стека, если он уже существует

public void replaceFragment(Fragment fragment, boolean addToBackStack, boolean customAnimation) { 
    FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction transaction = manager.beginTransaction(); 
    String tag = fragment.getClass().getSimpleName(); 
    if (customAnimation) { 
     transaction.setCustomAnimations(R.anim.slide_in_bottom, R.anim.slide_out_bottom, R.anim.slide_in_bottom, R.anim.slide_out_bottom); 
    } 
    transaction.replace(R.id.fragment_container, fragment, tag); 

    // remove from back stack if exists 
    // always return false! 
    boolean f = manager.popBackStackImmediate(tag, 0); 

    if (addToBackStack) { 
     transaction.addToBackStack(tag); 
    } 
    transaction.commit(); 
} 

ответ

4

Держите его простым и просто добавьте в задний стек, если необходимо. Если фрагмент добавляется тот же класс, что и текущий фрагмент, не добавить в стек обратно:

public void replaceFragment(Fragment frag) { 
    FragmentManager manager = getSupportFragmentManager(); 
    if (manager != null){ 
     FragmentTransaction t = manager.beginTransaction(); 
     Fragment currentFrag = manager.findFragmentById(R.id.content_frame); 

     //Check if the new Fragment is the same 
     //If it is, don't add to the back stack 
     if (currentFrag != null && currentFrag.getClass().equals(frag.getClass())) { 
      t.replace(R.id.content_frame, frag).commit(); 
     } else { 
      t.replace(R.id.content_frame, frag).addToBackStack(null).commit(); 
     } 
    } 
} 
+1

Это то, что мне действительно нужно. Спасибо, Дэниэл. У меня есть вопрос. Почему вы передали «null» в качестве имени стека? Если я передам тег фрагмента, что произойдет? – Alireza

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

  • Нет связанных вопросов^_^