我正在使用导航控制器组件,并且在底部导航视图中有4个选项卡菜单。 我想为配置文件选项卡菜单(索引3中的菜单)设置两个不同的片段(以及不同的xml布局),因此,如果验证了用户,则将显示UI A,否则将显示UI B
那么如何动态地改变片段和用户界面呢?
将从主页片段(主页选项卡菜单-菜单索引0)中提取用户数据。然后保存在本地存储中。所以我想要当用户标签索引3(配置文件)时,它会根据用户状态(已验证或未验证)显示不同的用户界面
还是您有更好的方法来实现类似的行为?
这是我设置底部导航视图的主要活动代码
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>