使用jetpack的BottomNavBar导航视图时出现问题
这就是我的流程的工作方式。
我有4个视图,每个视图都有重定向,例如,当我在导航栏的最后选择中时,我有一个fragment A
-> fragment B
,而当我回到第一个选择时导航栏,当我回到第4个导航栏时,再次回到fragment A
。我认为这是因为,如果jetpack可以使用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))
}
}
答案 0 :(得分:0)
它与BottomNav的设置无关。而是在针对Android的实现中的显式行为。我会引用并解释:
行为 在Android设备上:该应用程序导航到目标的顶级屏幕。任何先前的用户交互和临时屏幕状态都会重置,例如滚动位置,选项卡选择和嵌入式搜索。
来自https://material.io/design/components/bottom-navigation.html#behavior
这意味着,当您单击BottomNav上的项目时,它应始终返回到该流程堆栈中的第一个片段。
如果我不清楚,这是伪表示:
BottomNavItem#1> Fragment1A> Fragment1B
BottomNavItem#2> Fragment2A> Fragment2B
如果您点击BottomNavItem#1
,它将加载Fragment1A
。然后想象一下使用按钮显示Fragment1B
的情况。如果现在单击BottomNavItem#2
,您将看到Fragment2A
。现在,如果您点击BottomNavItem#1
,它将显示Fragment1A
(不是不是您上次看到的Fragment1B
),因为它是该堆栈的根/流。