替换片段后,来自旧片段的视图仍保留在内容视图中
Views from old fragment remain in content view after the fragment is replaced
我遇到了一个特殊的错误:在我的应用程序中,我的底部导航栏使用以下代码替换了 FrameLayout 视图中的片段:
override fun setFragment(frag: Fragment, addToBackStack: Boolean) {
FirebaseAnalytics.getInstance(this).setCurrentScreen(this, frag::class.java.simpleName, frag::class.java.simpleName)
val ft = supportFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.fragment_in, R.anim.fragment_out, R.anim.fragment_in, R.anim.fragment_out)
.replace(R.id.container, frag)
if (addToBackStack) {
viewModel.showNavigation = false
ft.addToBackStack(null)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
ft.commit()
}
一切似乎都工作正常 - 但对于在 onCreateView 方法中我调用以下方法的一个片段:
override fun requestPermissions(permissions: Array<String>, requestCode: Int) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
activity.requestPermissions(permissions, requestCode)
}
这会导致前一个片段的视图保留在屏幕上,并在它们下方 添加新片段,如屏幕截图所示:
更糟糕的是,视图将停留在屏幕中,直到 activity 被杀死。我能找到的唯一解决方法是在请求许可之前增加 0.5 秒的延迟:
Handler().postDelayed({ requestPermission(android.Manifest.permission.ACCESS_FINE_LOCATION, requestCode = REQUEST_PERMISSION_LOCATION) }, 500L)
我的问题是 - 有谁知道这种行为的原因是什么,是否有更好的方法来规避它?
我的解决方案是按照@Yolo 的原始问题评论中的建议在 xml
文件中设置背景颜色。
android:background="@android:color/white"
进行此更改后,当我切换到新片段时,此片段的片段不再存在。
我遇到了一个特殊的错误:在我的应用程序中,我的底部导航栏使用以下代码替换了 FrameLayout 视图中的片段:
override fun setFragment(frag: Fragment, addToBackStack: Boolean) {
FirebaseAnalytics.getInstance(this).setCurrentScreen(this, frag::class.java.simpleName, frag::class.java.simpleName)
val ft = supportFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.fragment_in, R.anim.fragment_out, R.anim.fragment_in, R.anim.fragment_out)
.replace(R.id.container, frag)
if (addToBackStack) {
viewModel.showNavigation = false
ft.addToBackStack(null)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
ft.commit()
}
一切似乎都工作正常 - 但对于在 onCreateView 方法中我调用以下方法的一个片段:
override fun requestPermissions(permissions: Array<String>, requestCode: Int) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
activity.requestPermissions(permissions, requestCode)
}
这会导致前一个片段的视图保留在屏幕上,并在它们下方 添加新片段,如屏幕截图所示:
更糟糕的是,视图将停留在屏幕中,直到 activity 被杀死。我能找到的唯一解决方法是在请求许可之前增加 0.5 秒的延迟:
Handler().postDelayed({ requestPermission(android.Manifest.permission.ACCESS_FINE_LOCATION, requestCode = REQUEST_PERMISSION_LOCATION) }, 500L)
我的问题是 - 有谁知道这种行为的原因是什么,是否有更好的方法来规避它?
我的解决方案是按照@Yolo 的原始问题评论中的建议在 xml
文件中设置背景颜色。
android:background="@android:color/white"
进行此更改后,当我切换到新片段时,此片段的片段不再存在。