2015-04-12 7 views
1

У меня есть несколько фрагментов. Они переходят с использованием анимации скольжения. MainFragment-> Fragment2 -> Fragment3.Управление фрагментами back-stack на android

1) Я хочу очистить backstack, когда пользователь достигает MainFragment, оставляя только этот фрагмент в стеке.

2) В некоторых случаях я хочу удалить предыдущий элемент в стеке. Скажите, когда пользователь нажмет кнопку назад и переместится из фрагмента3 => фрагмент2.

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

Другой вопрос, когда я удаляю фрагменты из backstack, они попадают?

private void replace(Fragment fragment)  
{ 
if(fragment == null) return; 

      FragmentTransaction fragmentTransaction = fragmentManager 
        .beginTransaction(); 
      fragmentTransaction.setCustomAnimations(R.anim.fragment_enter, 
        R.anim.fragment_exit); 

      fragmentTransaction.replace(R.id.fragment, fragment); 
      fragmentTransaction.addToBackStack(fragment.toString()); 

      fragmentTransaction.commit(); 


      if(fragment instanceof MainFragment) 
       clearBackStack(); 
} 

public void clearBackStack() { 

     if (fragmentManager.getBackStackEntryCount() > 0) { 
      FragmentManager.BackStackEntry first = fragmentManager.getBackStackEntryAt(0); 
      fragmentManager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE); 
     } 
    } 

ответ

0

Может быть, я недоразумение, проще, чем вы думаете. Здесь я вызываю метод addFragmentTransaction. С Google образец кода @Fragments и использование кода в качестве образца:

FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

// and add the transaction to the back stack 
transaction.add(R.id.fragment, fragment3); 
transaction.addToBackStack(fragment3.toString()); 

// Commit the transaction 
transaction.commit(); 

Примечание: добавить метод не заменяет/удалить FRAGMENT2 как предыдущий фрагмент. Вызвать transaction.add с фрагмент3 после использования или добавления фрагмент2. Поэтому обратная клавиша покажет фрагмент2, когда отображается фрагмент3.

+0

Основываясь на вашей ссылке «Например, вот как вы можете заменить один фрагмент на другой и сохранить предыдущее состояние в заднем стеке:« Мне кажется, мне нужно заменить. – pats

+0

@pats. В вашем случае, вероятно, вам лучше называть метод добавления, как я сказал выше. Я дал ссылку как хорошую документацию и сравнение. Если вы «добавите» фрагмент 3 после использования или добавления фрагмента2, тогда обратная клавиша покажет фрагмент2. Я обновлю свои заметки, чтобы это было ясно. –

+0

Спасибо за ваше предложение, я устал add(), но он не изменил фрагмент. Он застрял на MainFragment. Моя цель здесь заключается в том, когда мы достигаем Mainfragment с любого пути, весь задний стек должен быть уничтожен. Но традиции фрагментов должны работать по назначению. – pats

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

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