Android的碎片导航和backstack [英] Android fragments navigation and backstack

查看:115
本文介绍了Android的碎片导航和backstack的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个标题栏(有点像菜单)和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都显示在同一个视图,以便在这种情况下,

当用户点击你的菜单,你必须确认当前显示的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.

这篇关于Android的碎片导航和backstack的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆