Как я могу удалить MenuItem, если пользователь вошел в систему или изменил название? - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть навигационный ящик в моем приложении, и у меня есть несколько элементов, и я хочу, чтобы элемент «Регистрация» был невидимым, если пользователь входит в систему, а заголовок «Логин» меняется на «Выход из системы». Я искал пути чтобы сделать это, но я продолжал получать ошибки.

Это выглядит так: drawer

У меня есть класс, где я храню свой код навигации внутри, который я вызываю в другие действия, которые выглядят следующим образом:

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
    }

я ошибаюсь, создавая ящик таким образом?

1 Ответ

0 голосов
/ 24 февраля 2020

Вам придется оставить references для пунктов меню, которые вы хотите mutate (изменить имя, сделать невидимым и т. Д. c). Для этого используйте следующий код в 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"
...