android导航抽屉上的popBackStack()

时间:2018-04-06 00:06:34

标签: android android-studio

在我的应用程序中,我使用了android导航抽屉。基本上,它工作正常。在该用户可以使用导航抽屉导航到关于我们,家庭等片段。但是当我在标题栏上实现后退按钮时,它会打开导航抽屉,而不会返回到前一个片段。

前: -

认为一个用户启动应用程序,现在他被定向到主页片段。然后使用导航抽屉将用户导航到“关于我们”片段,然后他尝试使用后退按钮返回到主页片段。当他按下后退按钮时,导航抽屉被打开而没有将他带到主页片段。

我认为Android还会将开放式导航抽屉动作添加到后台堆栈。

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
          drawer.closeDrawer(GravityCompat.START);
    } else{
        super.onBackPressed();
    }
}

这是我如何更改onNavigationItemSelected(MenuItem item)

中的片段
 if(fragment1 != null){
        FragmentManager fragmentManager = getSupportFragmentManager();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        FragmentTransaction ft = fragmentManager.beginTransaction();

        ft.replace(R.id.screen_area, fragment1).addToBackStack("fragment");

        ft.commit();
    }

那么,有没有办法回到以前的片段页面转义打开导航抽屉?或者有没有办法获得任何以前的片段?

1 个答案:

答案 0 :(得分:1)

我假设您正在使用工具栏显示后退箭头,您希望在进入片段时禁用抽屉,因为您必须做两件事。

在创建片段时启用抽屉锁定模式

public void setDrawerState(boolean isEnabled) {

        if (isEnabled) {
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
            drawerToggle.onDrawerStateChanged(DrawerLayout.LOCK_MODE_UNLOCKED);
            drawerToggle.setDrawerIndicatorEnabled(true);
            drawerToggle.syncState();

        }
        else {
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
            drawerToggle.onDrawerStateChanged(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
            drawerToggle.setDrawerIndicatorEnabled(false);
            drawerToggle.syncState();
        }}

在片段内添加按钮弹出操作。

 Toolbar toolbar = (ToolBar)getActivity().findViewById(R.id.toolbarId);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getActivity().onBackPressed();
            }
        });