如何在导航抽屉中维护片段的后退堆栈?

时间:2020-03-16 06:38:02

标签: java android

我参加了一个活动,并在活动中附加了导航抽屉和主页片段。在该导航抽屉中有一个“联系我们”选项。当用户单击该选项时,将打开一个片段。但是我无法维持这些堆栈。表示当我在“与我们联系”片段时,请再次使用导航抽屉,单击“与我们联系”,它会覆盖前一个。我必须按2次“返回”按钮才能继续播放家庭片段。请帮助我如何为此维护后堆栈。这是我的代码。

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();
    }

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

1 个答案:

答案 0 :(得分:0)

我通过在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
            }
        }
    });