Android fragments navigation and backstack

佐手、 提交于 2019-12-30 06:18:10

问题


I have a header bar (kinda like menu) and 4 fragments (MAIN, A, B, C) from which the MAIN should be 'main/root' fragment for backstack.

Problem i have is when user via menu goes for example MAIN > A > B > C. If i simply use backstack it will go in reverse order which i don't want. I need back button to go back to MAIN no matter how user navigated to one of those 3.

My current code (which is wrong, it quits app when not in MAIN and current fragment is switched from other non-MAIN fragment) looks like this:

private void SwitchFragment(Fragment pFragment)
{
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.main_fl_fragmentcontainer, pFragment);
    if (_CurrentFragment == _Frag_Main)
        ft.addToBackStack(null);
    ft.commit();

    _CurrentFragment = pFragment;
}

回答1:


Your stack must contains 2 fragments at maximum

Main is visible Main is onBackstack / AorBorC is visible. User click on back ==> Main is visible. User click on back ==> application end

I suppose A / B / C are displayed in the same view so in this case,

When user click on your Menu, you have to check if A/ B / C is currently displayed and replace it by the one selected by the user.

private void displayFragment(Fragment pFragment) {
    Fragment fr = getSupportFragmentManager()
            .findFragmentById(R.id.main_fl_fragmentcontainer);        
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.main_fl_fragmentcontainer, pFragment);
    if (_CurrentFragment == _Frag_Main) {
        ft.addToBackStack(null);
    }
    ft.commit();    
    _CurrentFragment = pFragment;
}

can override OnBackPressed method of your activity.



来源:https://stackoverflow.com/questions/13210446/android-fragments-navigation-and-backstack

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!