gpt4 book ai didi

java - 使用android导航组件时,有没有办法防止在bottomNavigation中重新创建 fragment

转载 作者:行者123 更新时间:2023-12-04 01:03:04 25 4
gpt4 key购买 nike

我在 android 导航组件中使用底部导航当我单击之前选择的项目时,系统会创建该 fragment 的一个新实例,在 View 中替换它并删除最后一个 fragment 。我想防止重新创建 fragment 并忽略用户点击

这是我的菜单:

<item
android:id="@+id/historyFragment"
android:title="@string/main_records"
android:icon="@drawable/ic_records"
app:showAsAction="ifRoom"/>

<item
android:id="@+id/mainFragment"
android:icon="@drawable/ic_pulse"
android:title="@string/main_measure" />

<item
android:id="@+id/settingFragment"
android:icon="@drawable/ic_settings"
android:title="@string/main_setting"
app:showAsAction="ifRoom"/>

最佳答案

从版本 2.2.0-alpha02 开始,这是一个已知问题,NavigationUI 不会开箱即用。但是,有一种 hacky 方法可以实现您想要的:

navController.addOnDestinationChangedListener { _, destination, _ ->

for(menuItem in bottomNav.menu.iterator()){
menuItem.isEnabled = true
}

val menu = bottomNav.menu.findItem(destination.id)
menu?.isEnabled = false
}

在这里,如果 menuItem 的 ID 与目标 ID 相同,我将禁用它。但起初我启用了所有 menuItem,因为一个项目可能会被上一次迭代禁用。

在此之后,要获得样式,您需要为禁用的 menuItem 设置颜色。您可以通过设置以下 colorState 来做到这一点

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:color="@color/colorPrimary" />
<item
android:state_checked="false"
android:color="@color/colorAccent" />

<item
android:state_enabled="false"
android:color="@color/colorPrimary" />
<item
android:state_enabled="true"
android:color="@color/colorAccent" />
</selector>

最后你需要在 BottomNav 中使用这个颜色状态

<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNav"
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:itemIconTint="@color/bottom_color_state"
app:itemTextColor="@color/bottom_color_state"
app:menu="@menu/menu_bottom"/>

这不是最好的解决方案。但这行得通。

希望这对您有所帮助。

关于java - 使用android导航组件时,有没有办法防止在bottomNavigation中重新创建 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57773823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com