2016-12-12 10 views
1

У меня есть 2 активации A & B, в действии AI управляемый фрагмент назад, но в одном случае, как показано ниже: У меня есть 4 фрагмента в активности, происходящих из фрагмента 1 - 2 - 3 - 4 то из 4-го фрагмента я собираюсь в Activity B, теперь я хочу, чтобы нажимал фрагмент 4 кнопки назад, который должен быть открыт, а затем на задний фрагмент 3 и так далее.Сохранение фрагментов-backstack предыдущей деятельности

Я использую следующую функцию, чтобы заменить фрагмент и управлять обратно стеку

private void changeFragment(Fragment fragment) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    fragmentManager.beginTransaction().replace(R.id.act_home_fl_container, fragment).commit(); 
} 

На задней пресс

boolean isPopFragment = getSupportFragmentManager().getBackStackEntryCount() > 0 ? true : false; 
    if (isPopFragment) { 
     getSupportFragmentManager().popBackStack(); 
    } 

Я получил успех ДО здесь, но когда я собираюсь активность B от 4-й фрагмент и возвращаясь к Activity A, я не могу управлять стопкой фрагментов Activity A.

У меня нет никаких способов начать с него.

+0

Вы должны сохранить два стека для двух видов деятельности. Хотя вы можете управлять фрагментами в одной и той же деятельности. Я предлагаю вам посмотреть на этот проект github. [https://github.com/JetradarMobile/multibackstack]. Эти ребята сделали очень хорошую реализацию. – Wizard

ответ

0

вы можете переопределить onBackPressed внутри вашей деятельности, проверьте, какой фрагмент находится на вершине, и решить, что делать, как вы хотите:

@Override 
public void onBackPressed() 
{ 
    // code here 
    super.onBackPressed(); // check if you need this, depends on your needs 
} 
0

Используйте этот код, чтобы изменить фрагмент

public static void addFragment(final Fragment newFragment, final Fragment hideFragment) { 
    final FragmentManager fragmentManager = getFragmentManager(); 
    final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.hide(hideFragment); 
    fragmentTransaction.add(R.id.activity_home_container, newFragment, newFragment.getClass().getSimpleName()); 
    fragmentTransaction.addToBackStack(hideFragment.getClass().getSimpleName()); 
    fragmentTransaction.commitAllowingStateLoss(); 
} 

newFragment " Фрагмент, который вы хотите добавить «
hide Фрагмент« Фрагмент, который находится на контейнере »