从堆栈碎片中删除

时间:2019-06-08 19:15:18

标签: android android-fragments kotlin fragment

在我的Android应用程序中,我有3个片段(MainFragment,FavoriteFragment,UserFragment)和bottomnavigationview。

如果我从Frag1-> Frag2-> Frag3移开,然后按后退,返回Fragm2,但我不想保存片段跟踪并关闭贴布

private fun loadFragment(fragment: Fragment) {
       val transaction = supportFragmentManager.beginTransaction()
       transaction.replace(R.id.frameLayout, fragment)
       transaction.addToBackStack(null)
       transaction.commit()
   }

1 个答案:

答案 0 :(得分:0)

如果我了解您的问题,您想让后退键将您的碎片退回而不是退出应用程序,对吗?

如果是这种情况,那么您需要实现自定义逻辑来“替换”片段onBackPressed()

override fun onBackPressed() {
   // checking which is the current fragment and loading the proper one
   when(supportFragmentManager.findFragmentById(R.id.frameLayout)){
      is Fragment3 -> loadFragment(Fragment2.newInstance())
      is Fragment2 -> loadFragment(Fragment1.newInstance())
      else -> super.onBackPressed()
   }
}

或者您也可以add()片段。

private fun loadFragment(fragment: Fragment) {
       val transaction = supportFragmentManager.beginTransaction()
       transaction.add(R.id.frameLayout, fragment)
       transaction.addToBackStack(null)
       transaction.commit()
}

由于要在加载片段时替换该片段,这意味着该堆栈仅具有该片段的一个实例,因此在调用后按时它将弹出唯一的实例并关闭应用程序。