【问题标题】:popBackStack() on android navigation drawerandroid 导航抽屉上的 popBackStack()
【发布时间】:2018-04-06 00:06:33
【问题描述】:

在我的应用程序中,我使用了 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();
    }

那么,有什么方法可以返回到上一个片段页面逃逸打开导航抽屉?或者有什么办法可以得到以前的片段?

【问题讨论】:

  • 如果我建议,您必须在抽屉关闭时添加片段,这意味着当您的抽屉关闭时,会添加更多片段。所以现在,你不需要在你的背压方法中处理它了。
  • @SahilKumar 所以这意味着我需要在进行交易之前检查抽屉是否关闭?
  • 不只是将抽屉监听器添加到您的抽屉布局中并在您的抽屉关闭()方法中执行所有事务
  • 好的.. 如果您卡在任何地方,请告诉我。我会做一个回答。快乐编码

标签: android android-studio


【解决方案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();
            }
        });

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-10-21
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2020-07-20
  • 2014-06-11
相关资源
最近更新 更多