如何使用导航控制器组件在底部导航菜单的选项卡中显示不同的片段和XML?

时间:2020-01-06 02:02:20

标签: android android-jetpack android-navigation android-architecture-navigation android-jetpack-navigation

我正在使用导航控制器组件,并且在底部导航视图中有4个选项卡菜单。 我想为配置文件选项卡菜单(索引3中的菜单)设置两个不同的片段(以及不同的xml布局),因此,如果验证了用户,则将显示UI A,否则将显示UI B

那么如何动态地改变片段和用户界面呢?

将从主页片段(主页选项卡菜单-菜单索引0)中提取用户数据。然后保存在本地存储中。所以我想要当用户标签索引3(配置文件)时,它会根据用户状态(已验证或未验证)显示不同的用户界面

还是您有更好的方法来实现类似的行为?

enter image description here

这是我设置底部导航视图的主要活动代码

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>

0 个答案:

没有答案