首页 > 解决方案 > 如何使用导航控制器组件在底部导航菜单的选项卡中显示不同的片段和 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>

标签: androidandroid-jetpackandroid-navigationandroid-architecture-navigationandroid-jetpack-navigation

解决方案


推荐阅读