为啥我需要按两次后退按钮才能第一次关闭片段?

Posted

技术标签:

【中文标题】为啥我需要按两次后退按钮才能第一次关闭片段?【英文标题】:Why I need to press back button twice to dismiss fragment on first time?为什么我需要按两次后退按钮才能第一次关闭片段? 【发布时间】:2017-05-18 12:47:58 【问题描述】:

我有 Base Activity 包括 NavigationView 和 2 menu items。开始时它会加载Home fragment,其中包含background image。每个加载特定的fragment。当我选择条款和条件菜单项时,它会加载 T&C fragment 并且当我按下后退按钮时,它只会杀死它。

但是,当我选择 About Us 菜单项时,它会加载 About Us fragment 但我需要按两次 BACK button 才能杀死它。我需要知道为什么会这样?

AppBaseActivity中的部分代码

@Override
    protected void onCreate(Bundle savedInstanceState) 
        fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        HomeFragment homeFragment = new HomeFragment();
        fragmentTransaction.add(R.id.body_container, homeFragment, "");
        fragmentTransaction.commit();


    @Override
    public boolean onNavigationItemSelected(MenuItem item) 
        // Handle navigation view item clicks here.
        navigationView.getMenu().findItem(item.getItemId()).setChecked(true);
switch (item.getItemId()) 
            case R.id.nav_terms :
                fragmentTransaction = fragmentManager.beginTransaction();
                TCFragment tcFragment = new TCFragment();
                fragmentTransaction.replace(R.id.body_container, tcFragment, "");
                fragmentTransaction.commit();
                break;

            case R.id.nav_about_us :
                fragmentTransaction = fragmentManager.beginTransaction();
                AboutUsFragment aboutUsFragment = new AboutUsFragment();
                fragmentTransaction.replace(R.id.body_container, aboutUsFragment, "");
                fragmentTransaction.commit();
                break;


DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;

All fragments 只是通过膨胀尊重的 xml 来覆盖 onCreateView()fragments 还没有编写代码。

【问题讨论】:

使用 .add 而不是 .replace 来加载片段并查看 你覆盖了onBackPressed() 但是为什么它在 T&C 片段的情况下有效呢? @kishorejethava 不,我没有。 可能是因为你添加了 Home 片段。尝试在那里替换。 【参考方案1】:

您可以根据需要停止硬件导航。

只需使用onBackPressed() 而不使用super.onBackPressed()

@Override
public void onBackPressed() 


【讨论】:

【参考方案2】:
@Override
    public void onBackPressed() 
    super.onBackPressed();    

【讨论】:

一个简短的解释可能对 OP 有用。

以上是关于为啥我需要按两次后退按钮才能第一次关闭片段?的主要内容,如果未能解决你的问题,请参考以下文章

按一次返回按钮停留在同一个片段上,如果按两次,它将返回到上一个片段

必须按两次才能进行 Swift 3 按钮操作

为啥我需要在提交按钮上单击两次才能提交我的表单?

按钮需要单击两次才能工作 - 为啥?

斯威夫特:我必须调用 Facebook 登录按钮两次才能获得 FBSDKAccessToken

按两次 Enter 后完成弹出窗口关闭