【问题标题】:Always returns to main fragment onBackpressed始终返回主片段 onBackpressed
【发布时间】:2016-12-19 09:44:21
【问题描述】:

我已经在 Activity 中实现了导航抽屉。我的应用中有 3-4 个片段。

假设有 3 个片段:Fragment_1、Fragment_2、Fragment_3

当我启动我的应用程序时,Fragment_1 已加载,我使用导航抽屉转到另一个片段。

原来如此

Fragment_1 -> Fragment_2 -> Fragment_3 -> Fragment_1 -> Fragment_3

现在,当我按下返回按钮时,就像

Fragment_3 -> Fragment_1 -> Fragment_3 -> Fragment_2 -> Fragment_1

但是,我想要一些东西,比如当我按下返回键时,无论我在哪里,我 始终导航回 Fragment_1。

我正在使用下面的代码导航到另一个片段:-

nav_menu_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        switch (position) {
            case 0:
                DashboardFragment dashboardFragment = new DashboardFragment();
                fragmentTransaction.replace(R.id.mainContainer, dashboardFragment, dashboardFragment.getClass().getName());
                break;

            case 1:
                ProfileFragment profileFragment = new ProfileFragment();
                fragmentTransaction.replace(R.id.mainContainer, profileFragment, profileFragment.getClass().getName());
                fragmentTransaction.addToBackStack(null);
                break;

            case 2:
                ContactUsFragment contactUsFragment = new ContactUsFragment();
                fragmentTransaction.replace(R.id.mainContainer, contactUsFragment, contactUsFragment.getClass().getName());
                fragmentTransaction.addToBackStack(null);
                break;

            case 3:
                AboutUsFragment aboutUsFragment = new AboutUsFragment();
                fragmentTransaction.replace(R.id.mainContainer, aboutUsFragment, aboutUsFragment.getClass().getName());
                fragmentTransaction.addToBackStack(null);
                break;

            default:
                break;
        }
        fragmentTransaction.commit();
        drawer.closeDrawer(GravityCompat.START);
    }
});

请帮忙...

【问题讨论】:

    标签: android android-fragments navigation back-stack


    【解决方案1】:
    @Override
        public void onBackPressed() {
    
            if(!(getSupportFragmentManager().findFragmentById(R.id.mainContainer) instanceof DashboardFragment))
            {
                DashboardFragment dashboardFragment = new DashboardFragment();
                fragmentTransaction.replace(R.id.mainContainer, dashboardFragment, dashboardFragment.getClass().getName());
            }else {
                super.onBackPressed();
            }
        }
    

    将此方法用于主要活动将解决您的问题。

    【讨论】:

    • 收到此错误:- 运算符“!”不能应用于“android.app.fragment”
    • 不工作,还是和 Fragment_3 一样的形式 -> Fragment_1 -> Fragment_3 -> Fragment_2 -> Fragment_1
    • 从你的java代码中删除fragmentTransaction.addToBackStack(null);
    • 我更新了您的代码副本并将您的代码粘贴到您的应用程序中并运行它。
    • 我已经尝试过该代码,它不起作用,导致关闭应用程序无法启动dashboardFragment
    【解决方案2】:

    我已经更改了您代码中的下一行,并且效果很好

    替换:

    fragmentTransaction.replace(R.id.mainContainer, dashboardFragment, 
    dashboardFragment.getClass().getName());
    

    与:

    getSupportFragmentManager().beginTransaction().replace(R.id.mainContainer,
    dashboardFragment).commit();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多