【发布时间】:2018-12-18 14:53:10
【问题描述】:
我在使用 jetpack 的 BottomNavBar 时的导航视图有问题
这就是我的流程的运作方式。
我有 4 个视图,每个视图都有重定向,例如当我在导航栏的最后选择时我有一个 fragment A -> fragment B 当我回到导航栏的第一个选择时我再次回到第四个fragment A。我相信这是因为碎片正在使用setupWithNavController() 重新创建,如果喷气背包有解决方法吗?
这是我的代码供参考。
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@+id/splashFragment">
<fragment
android:id="@+id/selectionFragment"
android:name="whitecloak.com.allibuy.app.selection.SelectionFragment"
android:label="fragment_selection"
tools:layout="@layout/fragment_selection" >
<action
android:id="@+id/toLogin"
app:destination="@id/loginFragment"
app:launchSingleTop="true"
app:popUpTo="@+id/nav_graph"
app:popUpToInclusive="true/>
</fragment>
<fragment
android:id="@+id/splashFragment"
android:name="whitecloak.com.allibuy.app.splash.SplashFragment"
android:label="fragment_splash"
tools:layout="@layout/splash_fragment"
>
<action
android:id="@+id/toMain"
app:destination="@id/mainFragment"
app:launchSingleTop="true"
app:popUpTo="@+id/nav_graph"
app:popUpToInclusive="true"/>
</fragment>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/splashFragment"
android:icon="@drawable/home"
android:title="@string/home"
app:popUpTo="@id/nav_graph" />
<item
android:id="@+id/tabCart"
android:icon="@drawable/cart"
android:title="@string/cart"
app:popUpTo="@id/nav_graph" />
<item
android:id="@+id/tabNotif"
android:icon="@drawable/notification"
android:title="@string/notification"
app:popUpTo="@id/nav_graph"/>
<item
android:id="@+id/selectionFragment"
android:icon="@drawable/user"
android:title="@string/account"
app:popUpTo="@id/nav_graph" />
bottomNav.setupWithNavController(findNavController(R.id.nav_main))
我刚刚包含了第一个和最后一个选项卡的 XML。非常感谢。
编辑
class MainNavigation : DaggerAppCompatActivity() {
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
private lateinit var viewModel: MainNavigationViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProviders.of(this, viewModelFactory)[MainNavigationViewModel::class.java]
bottomNav.setupWithNavController(findNavController(R.id.nav_main))
}
}
【问题讨论】:
-
我相信你应该包含一些 Kotlin 来帮助我们理解上下文和正在完成的代码。例如,我想看看
bottomNav.setupWithNavController在哪里调用。 -
@shkschneider - 我更新了代码,它就在那里。非常感谢。
标签: android android-fragments kotlin navigation fragment