android - 如果用户已登录或更改标题,如何删除 MenuItem?
问题描述
我的应用程序中有一个导航抽屉,我有一些项目,如果用户登录,我希望“注册”项目不可见,并且“登录”标题更改为“注销”。我搜索了执行此操作的方法但我不断收到错误。
我有一个类,我将导航代码存储在其中,我在其他活动中调用它,如下所示:
class NavigationHandler(val context: Context, val item: MenuItem) : AppCompatActivity() {
operator fun invoke() {
when (item.itemId) {
R.id.nav_latestAds -> {
val homeIntent = Intent(context, MainActivity::class.java)
context.startActivity(homeIntent)
}
R.id.nav_cars -> {
val carListIntent = Intent(context, CarsList::class.java)
context.startActivity(carListIntent)
}
R.id.nav_properties -> {
val carListIntent = Intent(context, PropertyList::class.java)
context.startActivity(carListIntent)
}
R.id.nav_mobiles -> {
val intent = Intent(context, MobileList::class.java)
context.startActivity(intent)
}
R.id.nav_electDev -> {
val homeIntent = Intent(context, ElectricsList::class.java)
context.startActivity(homeIntent)
}
R.id.nav_furniture -> {
val intent = Intent(context, FurnitureList::class.java)
context.startActivity(intent)
}
R.id.nav_vendorReg -> {
val intent = Intent(context, RegisterVendor::class.java)
context.startActivity(intent)
}
R.id.nav_settings -> {
val intent = Intent(context, Settings::class.java)
context.startActivity(intent)
}
R.id.nav_logout -> {
if (AuthService.isLoggedIn) {
UserDataService.logout()
} else {
val loginIntent = Intent(context, Login::class.java)
context.startActivity(loginIntent)
}
}
}
}
}
这是我在其他活动中的称呼:
override fun onNavigationItemSelected(item: MenuItem): Boolean {
NavigationHandler(this, item)()
drawerLayout.closeDrawer(GravityCompat.START)
return true
}
我这样建造抽屉有错吗?
解决方案
您将不得不保留references
您想要的菜单项mutate
(更改名称、使不可见等)。要实现这一点,请在您的activity
// Declate two variables in your activity
private lateinit var register: MenuItem
private lateinit var logIn: MenuItem
// Now initialize them in your activity's onCreate as follows
var navigationView = findViewById(R.id.idOfNavigationView)
register = navigationView.menu.findItem(R.id.idOfRegister)
logIn = navigationView.menu.findItem(R.id.idOfLogin)
现在您有了您的menu
项目,您可以更改它们的标题或使它们不可见。例如,如果您想隐藏注册菜单项并更改登录标题,您将执行以下操作
// Once user has logged in successfully, use following lines to change menu items as you wish
register.isVisible = true
logIn.title = "logout"
推荐阅读
- python - 如何从给定记录中获取用户 ID 值
- react-native - 如果我使用按钮代替它,则无法执行 TouchableOpacity 或 TouchableHighlight 的 onPress 它工作我做错了什么?
- javascript - 如何将所选项目传递给axios
- python - python在打印功能后离开线
- java - URL 参数正在被修改
- matlab - 如何将此特定时间戳编号转换为日期?
- r - rtweet 函数“get_followers”不返回任何内容
- android - 在 Android 上,如何在网络层 (IP) 上捕获传入的数据包?
- python - 阻止文本小部件随字体大小改变大小?
- claudiajs - 如何在使用 Claudia 部署的 express js 应用程序中设置 Lambda 上下文