在使用Navigation Component时,Activity不会重新启动的问题可能是因为使用了默认的FragmentContainerView作为NavHost,它是一个自定义View。如果该View的ID相同,那么Android将会重复使用同一个Activity来显示新Fragment,从而导致Activity不会重新启动。
为了解决这个问题,我们可以使用其他类型的View,例如FrameLayout或其他自定义View,作为NavHost。
以下是使用FrameLayout作为NavHost的示例代码:
在activity_main.xml中将FragmentContainerView更改为FrameLayout:
在MainActivity.kt中,我们需要将NavHost设置为FrameLayout:
//在activty中声明NavHostFragment
private lateinit var navHostFragment: NavHostFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navHostFragment = NavHostFragment.create(R.navigation.bottom_nav_graph)
supportFragmentManager.beginTransaction()
.replace(R.id.nav_host_fragment, navHostFragment)
.setPrimaryNavigationFragment(navHostFragment)
.commit()
}
这样,使用Navigation Component的Activity就会在每次导航时重新启动。
上一篇:androidKotlin-locationservicesdidn'tgetenabledeventhoughlocationpermissionisgrantedinphonesettings
下一篇:AndroidKotlin-onBackPressedDispatcher.onBackPressed()willfinishmyactivity?