为啥我需要按两次后退按钮才能第一次关闭片段?
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 有用。以上是关于为啥我需要按两次后退按钮才能第一次关闭片段?的主要内容,如果未能解决你的问题,请参考以下文章
按一次返回按钮停留在同一个片段上,如果按两次,它将返回到上一个片段