更换后如何返回第一个Android Fragment [英] How to go back to first Android Fragment after replace

查看:199
本文介绍了更换后如何返回第一个Android Fragment的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

替换后,我正尝试回到第一个片段,但是supportFragmentManager.popBackStackImmediate()无法正常工作...

I'm trying to get back to the first fragment after replacing it, but supportFragmentManager.popBackStackImmediate() do not work...

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.countries_list_activity)
        var colonCount = 1


        if (savedInstanceState == null) {
            supportFragmentManager.beginTransaction()
                .replace(R.id.container, CountriesFragment.newInstance(colonCount))
                .addToBackStack(null)
                .commit()
        }
    }

    override fun onListFragmentInteraction(item: Country?) {
        supportFragmentManager.beginTransaction()
            .replace(R.id.container, CountriesListFragment.newInstance())
            .commit()

    }

    override fun onBackPressed() {
        supportFragmentManager.popBackStackImmediate()
    }

函数调用顺序为OnCreate-> onListFragmentInteraction-> onBackPressed 我想念的是什么?

The function call order is OnCreate -> onListFragmentInteraction -> onBackPressed What i'm missing?

推荐答案

开始时,我使用popbackstack方法,但是每次按下后退按钮时,它都会循环迭代.所以我改变了我的概念,而不是popbackstack我保持不变的变量.并使用它来管理我的片段.为此,请按照以下步骤操作.

At starting i use popbackstack method but in this it iterate loop every time when back button is pressed. So i change my concept instead of popbackstack i maintain constant variable. and using this i manage my fragment. For that Follow Below Steps.

第1步:至少设置两个全局变量.

Step 1: make atleast two Global Variable.

    public static String currentTAG="HomeFragment";
    public static String AboutUsFragment="AboutUsFragment";
    public static String HelpfulTipsFragment="HelpfulTipsFragment";

第2步:在片段打开"时更改CurrentTag值.

Step 2: Change CurrentTag value when Fragment Open.

在currentTAG = HomeFragment中的Home Fragment中 类似地,对于 aboutUsFragment set CurrentTAG = AboutUsFragment;

In Home Fragment in currentTAG=HomeFragment similarly for aboutUsFragment set CurrentTAG=AboutUsFragment;

步骤3:然后在您的主要活动之后,在Onbackpress方法中写下以下代码.

Step 3: Then After in Your main Activity Write down Below Code in Onbackpress method.

if (Const.currentTAG.equals(Const.HomeFragment)) {
            ExitApp();
        }else{
         getSupportFragmentManager().beginTransaction().replace(R.id.maincontainer, new HomeFragment()).addToBackStack(null).commit();
        }


      private void ExitApp() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(context);

    builder.setTitle(R.string.app_name);
    builder.setMessage(R.string.ask_before_close);
    builder.setIcon(R.mipmap.ic_launcher);
    //final AlertDialog dialog = builder.create();
    builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

            finish();

        }
    });
    builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

        }
    });
    builder.show();
}

类似地,您可以管理多个片段,而无需迭代循环和popbackstack.

Similarly You Can Manage Multiple Fragment Without Iterating loop and popbackstack.

注意::加载片段时,请使用替换"而不是像下面的代码那样添加

NOTE: When You Load Fragment Use Replace instead of add like below Code

 getSupportFragmentManager().beginTransaction().replace(R.id.maincontainer, new AboutAppFragment()).addToBackStack(null).commit();

这篇关于更换后如何返回第一个Android Fragment的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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