Skip to content Skip to sidebar Skip to footer

Only Safe(?.)or Non-null Asserted(!!.) Calls Are Allowed On A Nullable Receiver Of Type Menuitem

i am trying to add event for option menu items in android studio but i am getting this error message when i use item.itemId only safe(?.)or non-null asserted(!!.) calls are allowe

Solution 1:

The problem is item is defined as nullable . So you need to make sure that it should not be null before using it.

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

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

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

    }
    returnsuper.onOptionsItemSelected(item)
}

Or you can use let

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

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

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

        }
    }
    returnsuper.onOptionsItemSelected(item)
}

Solution 2:

The easiest way to avoid this is in such cases, is to add elvis operator at first line

item ?: returnfalse

But in this particular case, you can be sure, that item is not null by design, so you can safely remove question mark from method declaration

overridefunonOptionsItemSelected(item: MenuItem): Boolean {

Post a Comment for "Only Safe(?.)or Non-null Asserted(!!.) Calls Are Allowed On A Nullable Receiver Of Type Menuitem"