android - 从堆栈碎片中移除
问题描述
在我的 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()
}
解决方案
如果我理解您的问题,您希望后按将您带回一个片段而不是退出应用程序,对吗?
如果是这种情况,那么您需要实现自定义逻辑来“替换”片段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()
}
因为您在加载片段时要替换片段,这意味着返回堆栈只有一个实例,因此当调用返回时,它将弹出唯一的实例并关闭应用程序。
推荐阅读
- java - 如何在其构造函数中获取使用依赖注入的类的实例
- c# - 没有数据库的 ASP.NET Core 中的登录功能
- haskell - Lambda Calculus 变量变化及应用题
- javascript - 函数遍历Json对象数组需要返回一个对象
- c# - 在 WebClient.UploadStringTaskAsync 之后获取响应 cookie
- c# - “SubscriptionClient”不包含“PeekBatch”和 ReceiveBatch 的定义
- javascript - for 循环的 document.getElementById 问题
- php - 如何使用 usort 对 MongoDB 查询结果进行排序
- docker - 使用高速网络的 Docker 拉取
- android - 开始编程:如何将 ArrayAdapter 传递给 RecyclerView?