Backstack片段没有出现在后退按钮prerssed前 [英] Backstack Fragment not appearing in front on Back button prerssed

查看:217
本文介绍了Backstack片段没有出现在后退按钮prerssed前的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经写在这之前经历了许多计算器的问题了。我很困惑这个家伙Backstack的片段。

I have gone through many stackoverflow question before writing this. i am so confused about this guy Backstack in fragment.

我已经加入了同一个容器中的三个片段的活动在

I have Added three fragment on the same container inside an Activity

片段1:

private void addLandingFragment() {
        landingPageFragment = LandingPageFragment.newInstance();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add( R.id.container, landingPageFragment, LANDING_PAGE_FRAGMENT_TAG );
        transaction.commit();

    }

片段2:

public void addIntrofragment() {
    fragment2 = IntroFragment.newInstance();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.replace( R.id.container, fragment2, INTRO_PAGE_FRAGMENT_TAG);
    transaction.addToBackStack(fragment2.getClass().getName() );
    transaction.commit();
}

片段3:

public void onGetStartedClicked() {
        fragment3= ConnectFragment.newInstance();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace( R.id.container, fragment3,CONNECT_PAGE_FRAGMENT_TAG );
        transaction.commit();
    }

现在我想要什么,当用户presses后退按钮上的片段3它应该在第一个片段,所以我overrided的onBack pressed()方法。

Now what I want is when user presses back button on fragment 3 it should come on very first fragment so I have overrided the onBackPressed() method.

@Override
    public void onBackPressed() {
        manager.popBackStack(fragment2.getClass().getName() ,FragmentManager.POP_BACK_STACK_INCLUSIVE );

    }

但没有发生在屏幕上它保持片段3的运行。

but nothing happening on screen it keeps fragment 3 running.

更新

当我从

片段1> fragment2

fragment1 > fragment2

和presses后退按钮上fragment2,我来到片段1但如果从

and presses back button on fragment2, I am coming to fragment1 but if move from

片段1> fragment2> fragment3

fragment1 > fragment2> fragment3

我收到堆栈条目数1在 onBack pressed()的方法,但在设备屏幕上仍显示fragment3。现在$ P $再次pssing后退按钮将退出我的应用程序,但片段1不会来在屏幕上。因此百思不得其解,为什么这是怎么回事?

I am getting the stack entry count 1 on onBackPressed() method but on device screen it still shows fragment3. Now pressing back button again will exit me from app but fragment1 wont come on screen. So puzzling why it is happening ?

任何解决方案,以实现这一目标。

Any solution to achieve this.

推荐答案

感谢Silvia.H给你支持。我已经解决我的问题,并发现这对我来说最佳的解决方案。

Thanks Silvia.H for you support. I have solved my problem and found it as the best possible solution for me.

我做的唯一的错误是,我没有在backstack添加fragment3

The only mistake I did was, I did not add fragment3 in backstack

所以,唯一需要的变化呈

So the only changes required was

public void onGetStartedClicked() {
        fragment3= ConnectFragment.newInstance();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.replace( R.id.container, fragment3,CONNECT_PAGE_FRAGMENT_TAG );
        transaction.addToBackStack(ConnectFragment.class.getName() );
        transaction.commit();
    }

现在这个让你清楚,为了使用popBackStack与名称,比如

Now this makes you clear that in order to use popBackStack with name like

manager.popBackStack(fragment2.getClass().getName() ,FragmentManager.POP_BACK_STACK_INCLUSIVE );

你必须保持该交易在backstack从你这里居然pressing后退按钮。

you have to keep that transaction in backstack from where you are actually pressing the back button.

我已经在 onBack pressed()方法多了一个小的变化,它允许应用程序存在,当用户presses后退按钮上的片段1。

I have made one more small change in onBackPressed() method which allows the app to exist when user presses back button on fragment1.

我的 onBack pressed()看现在这个样子

@Override
    public void onBackPressed() {

        if( manager.getBackStackEntryCount() > 0 ) {
            getSupportFragmentManager().popBackStack(
                    scoreTrackerIntroFragment.getClass().getName(),
                    FragmentManager.POP_BACK_STACK_INCLUSIVE );
        }else {

            super.onBackPressed();
        }

    }

WOOP!现在我清楚这一点的Backstack的家伙。

这篇关于Backstack片段没有出现在后退按钮prerssed前的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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