android - 如何使用导航控制器组件在底部导航菜单的选项卡中显示不同的片段和 XML?
问题描述
我正在使用导航控制器组件,并且底部导航视图中有 4 个选项卡菜单。我想为配置文件选项卡菜单(索引 3 中的菜单)设置两个不同的片段(和不同的 xml 布局),所以如果用户被验证,那么我将显示 UI A,否则我将显示 UI B
那么如何动态地改变片段和 UI 呢?
用户数据将从主页片段(主页选项卡菜单 - 菜单索引 0)中获取。然后保存在本地存储中。所以我想当用户标签索引 3(配置文件)时,它会根据用户状态显示不同的 UI,验证与否
还是您有更好的方法来实现类似的行为?
这是我设置底部导航视图的主要活动代码
class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedListener {
private lateinit var navController : NavController
lateinit var generalToolbar : Toolbar
lateinit var bottomNavigationView : BottomNavigationView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navController = Navigation.findNavController(this,R.id.nav_host_fragment)
setUpViewDeclaration()
setupBottomNavMenu()
setupActionBar()
// Add Listeners
navController.addOnDestinationChangedListener(this)
}
private fun setUpViewDeclaration() {
generalToolbar = findViewById<ConstraintLayout>(R.id.include_toolbar_general).findViewById(R.id.toolbar_general)
bottomNavigationView = findViewById(R.id.bottom_nav)
}
private fun setupBottomNavMenu() {
bottom_nav.setupWithNavController(navController)
}
private fun setupActionBar() {
// set up top hierarchy destination
val appBarConfiguration = AppBarConfiguration(setOf(
R.id.destination_home,
R.id.destination_search,
R.id.destination_user_control,
R.id.destination_create_event)
)
setSupportActionBar(generalToolbar)
generalToolbar.setupWithNavController(navController,appBarConfiguration)
}
这是我的底部导航视图菜单的 XML
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/destination_home"
android:icon="@drawable/ic_home"
android:title="@string/home" />
<item
android:id="@+id/destination_search"
android:icon="@drawable/ic_search"
android:title="@string/search" />
<item
android:id="@+id/destination_create_event"
android:icon="@drawable/ic_add_circle_outline"
android:title="@string/createEvent" />
<item
android:id="@+id/destination_user_control"
android:icon="@drawable/ic_person"
android:title="@string/profile" />
</menu>
解决方案
推荐阅读
- php - 如何在 PHP 中使用相同的循环获取 $_POST 和 $_FILES 请求
- android - 运行子进程cordova 时出错。sh 无法识别
- testing - 在嵌入式设备上创建文件系统损坏
- ecmascript-6 - 使用地图和箭头功能将 2 个列表合二为一
- android - 我想在 kotlin 中使用 setter 来设置文档快照的值
- rest - 多对多资源映射restful api设计
- scheme - 方案::R5RS。尝试做绝对值程序
- sql - 关于如何分离 UpdateTarget 和 Filter
- sql - SQL group by 并在每列中使用条件进行选择
- javascript - 如何使用weather api删除天气预报中的第一个天气