首页 > 解决方案 > 从堆栈碎片中移除

问题描述

在我的 Android 应用程序中,我有 3 个片段(MainFragment、FavoriteFragment、UserFragment)和底部导航视图。

如果我离开Frag1-> Frag2-> Frag3,当我按下返回时,返回Fragm2,但我不想保存片段跟踪并关闭应用程序

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

标签: androidandroid-fragmentskotlinfragment

解决方案


如果我理解您的问题,您希望后按将您带回一个片段而不是退出应用程序,对吗?

如果是这种情况,那么您需要实现自定义逻辑来“替换”片段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()
}

因为您在加载片段时要替换片段,这意味着返回堆栈只有一个实例,因此当调用返回时,它将弹出唯一的实例并关闭应用程序。


推荐阅读