我正在使用抽屉式导航(与Android Navigation Jetpack组件相结合)在多个片段之间进行导航。 我在我的浮动操作按钮上(位于协调器布局内部)使用app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior"
,当我向上滚动时隐藏FAB,然后当我向下滚动时它会重新出现。 我的布局如下:
activity_main.xml
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/Drawer_Main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.main.MainActivity">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/Layout_Coordinator_Main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
...
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/FAB_Add"
style="@style/Locky.FloatingActionButton.Normal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior"
app:srcCompat="@drawable/ic_add" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.drawerlayout.widget.DrawerLayout>
行为符合预期。然而,如果我向上滚动并隐藏了浮动操作按钮,然后切换屏幕,浮动操作按钮仍然保持隐藏。我可以向下滚动使浮动操作按钮重新显示,但在某些情况下我无法向下滚动(例如我的recyclerview为空),因此无法使浮动操作按钮重新显示。
我尝试过这样的操作:
MainActivity.kt
private fun navigationDestinationChangeListener(navController: NavController) {
navController.addOnDestinationChangedListener { nc, nd, _ ->
when (nd.id) {
nc.graph.startDestination,
R.id.Fragment_Card,
R.id.Fragment_Device -> {
_binding.DrawerMain.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
//Show all the FABs
showFabs()
}
else -> {
_binding.DrawerMain.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
//Hide all the FABs
hideFabs()
}
}
}
}
我添加了一个导航目标改变监听器,在我的
showFabs()
函数中强制使FAB重新出现,但这并没有起作用。
有人可以帮我解决问题吗?或者如果我一直在错误地编码,可能有更好的编码方式吗?
感谢您的帮助。