Android的碎片导航和backstack碎片、Android、backstack

由网友(奏一曲、悲伤)分享简介:我有一个标题栏(有点像菜单)和4个片段(MAIN,A,B,C)从其中主要应该是backstack主/根'片段。问题我已经是当通过菜单用户进入例如MAIN> A> B> C。如果我只是使用backstack它会在我不想相反的顺序。我需要后退按钮返回主不管用户如何浏览到这3个中的一个。 我目前的code(这是不对的,它退...

我有一个标题栏(有点像菜单)和4个片段(MAIN,A,B,C)从其中主要应该是backstack主/根'片段。

问题我已经是当通过菜单用户进入例如MAIN> A> B> C。如果我只是使用backstack它会在我不想相反的顺序。我需要后退按钮返回主不管用户如何浏览到这3个中的一个。

我目前的code(这是不对的,它退出应用程序时,不是在MAIN和当前片段是由其他非主片段切换)看起来是这样的:

 私人无效SwitchFragment(片段pFragment){    FragmentTransaction英尺= getSupportFragmentManager()调用BeginTransaction()。    ft.replace(R.id.main_fl_fragmentcontainer,pFragment);    如果(_CurrentFragment == _Frag_Main)        ft.addToBackStack(NULL);    ft.commit();    _CurrentFragment = pFragment;} 

解决方案

您堆栈必须包含在最大2片段

主要是可见主要是onBackstack / AorBorC可见。用户点击返回==>主要是可见的。用户点击返回==>应用程序最终

我想A / B / C都显示在同一个视图,以便在这种情况下,

Android之探究碎片

当用户点击你的菜单,你必须确认当前显示的A / B / C和一个由用户选择更换。

 私人无效displayFragment(片段pFragment){    片段FR = getSupportFragmentManager()            .findFragmentById(R.id.main_fl_fragmentcontainer);    FragmentTransaction英尺= getSupportFragmentManager()调用BeginTransaction()。    ft.replace(R.id.main_fl_fragmentcontainer,pFragment);    如果(_CurrentFragment == _Frag_Main){        ft.addToBackStack(NULL);    }    ft.commit();    _CurrentFragment = pFragment;} 

可以覆盖 OnBack pressed 您的活动方式。

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;
}

解决方案

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.

阅读全文

相关推荐

最新文章