首页 > 解决方案 > 如何在导航抽屉中维护片段的回栈?

问题描述

我参加了一项活动,并通过活动附加了导航抽屉和主页片段。在该导航抽屉中,有一个“联系我们”选项。当用户单击该选项时,片段会打开。但我无法维护它的堆栈。意味着当我在联系我们片段时,再次使用导航抽屉点击联系我们它与前一个重叠。我必须按两次后退按钮才能继续主页片段。请帮助我如何为此维护后台堆栈。这是我的代码..

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                int id = item.getItemId();
                switch (id) {

                    case R.id.rate:

                        Uri uri = Uri.parse("market://details?id=" + getPackageName());
                        Intent myAppLinkToMarket = new Intent(Intent.ACTION_VIEW, uri);
                        try {
                            startActivity(myAppLinkToMarket);
                        } catch (ActivityNotFoundException e) {
                            Toast.makeText(getApplicationContext(), "Unable to find source market app!", Toast.LENGTH_SHORT).show();
                        }
                        break;


                    case R.id.contact_us:

                        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                        transaction.add(R.id.fragment_container_dashboard, ContactUsFragment.newInstance());
                        transaction.addToBackStack(null);
                        transaction.commit();
                        mDrawerLayout.closeDrawer(GravityCompat.START);


                        break;

                }
                return false;
            }
        });

在这段代码之后,我使用它来维护回栈:

@Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() != 0) {
            getFragmentManager().popBackStack();
        }

        else new AlertDialog.Builder(this)
                .setMessage("Are you sure you want to exit?")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        Dashboard.super.onBackPressed();
                    }
                })
                .setNegativeButton("No", null)
                .show();
    }

但问题是当我按下返回按钮时,它会在联系我们片段上显示退出对话框。但我想首先到达主页片段,然后如果我按下后退按钮,它会显示退出对话框。

标签: javaandroid

解决方案


我通过在 onCreate 方法中添加它来解决这个问题。

getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            if(getSupportFragmentManager().getBackStackEntryCount() == 0){
                drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
                menuToggle.setDrawerIndicatorEnabled(true);
                // your dialog
            }else{
                drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
                menuToggle.setDrawerIndicatorEnabled(false);
                // remove to your previous fragment
            }
        }
    });

推荐阅读