【问题标题】: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 片段。尝试在那里替换。

标签: android android-fragments android-activity android-navigationview appcompatactivity


【解决方案1】:

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

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

@Override
public void onBackPressed() {

}

【讨论】:

    【解决方案2】:
    @Override
        public void onBackPressed() {
        super.onBackPressed();    
    }
    

    【讨论】:

    • 一个简短的解释可能对 OP 有用。
    猜你喜欢
    • 1970-01-01
    • 2018-06-29
    • 2019-05-30
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2020-11-23
    • 2012-06-11
    • 2011-03-28
    相关资源
    最近更新 更多