重建原因:源码FragmentNavigator中对fragment的管理时通过replace实现的,所以会导致每次切换时重建。
解决思路:继承FragmentNavigator,把replace的实现方式改为show和hide实现。
用法:
1.如下:在name中引入自定义的NavHostFragmentHideShow
<fragment
android:id="@+id/nav_host_fragment"
android:name="com.cxz.kotlin.samples.navigation.NavHostFragmentHideShow"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:defaultNavHost="true"
app:navGraph="@navigation/main_nav" />
2.如下:通过setOnnavigationItemSelectedListener实现BottomNavigationView和NaviGraph关联。
bottom_navigation.setOnNavigationItemSelectedListener {
navController.navigate(it.itemId)
return@setOnNavigationItemSelectedListener true
}