Только допустимые (?.) Или ненулевые вызовы (!!.) Разрешены для обнуляемого получателя типа MenuItem - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь добавить событие для пунктов меню опций в Android Studio, но получаю это сообщение об ошибке при использовании item.itemId

разрешены только безопасные (?.) Или ненулевые вызовы (!!.) Для обнуляемых приемник типа MenuItem

вот мой код

override fun onOptionsItemSelected(item: MenuItem?): Boolean {

if(item.itemId==R.id.home){
    var homeIntent= Intent(this,SignIn::class.java)
    startActivity(homeIntent)

}
else if(item.itemId==R.id.sign_in){
    var signInIntent= Intent(this,SignIn::class.java)
    startActivity(signInIntent)

}
else if(item.itemId==R.id.close){
    System.exit(0)

}


return super.onOptionsItemSelected(item)
}

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Самый простой способ избежать этого в таких случаях, это добавить оператора elvis в первой строке

item ?: return false

Но в этом конкретном случае, вы можете быть уверены, что элемент не является нулевым по дизайну,так что вы можете безопасно удалить знак вопроса из объявления метода

override fun onOptionsItemSelected(item: MenuItem): Boolean {
0 голосов
/ 13 мая 2018

Проблема item определяется как nullable.Поэтому вам необходимо убедиться, что он не должен быть null перед его использованием.

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
    if(item?.itemId==R.id.home){
        var homeIntent= Intent(this,SignIn::class.java)
        startActivity(homeIntent)

    }
    else if(item?.itemId==R.id.sign_in){
        var signInIntent= Intent(this,SignIn::class.java)
        startActivity(signInIntent)

    }
    else if(item?.itemId==R.id.close){
        System.exit(0)

    }
    return super.onOptionsItemSelected(item)
}

Или вы можете использовать let

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
    item?.let {
        if(it.itemId==R.id.home){
            var homeIntent= Intent(this,SignIn::class.java)
            startActivity(homeIntent)

        }
        else if(it.itemId==R.id.sign_in){
            var signInIntent= Intent(this,SignIn::class.java)
            startActivity(signInIntent)

        }
        else if(it?.itemId==R.id.close){
            System.exit(0)

        }
    }
    return super.onOptionsItemSelected(item)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...