Ошибка изменения видимости элемента меню в Android

#java #android

#java #Android

Вопрос:

Я пытаюсь изменить видимость пункта меню. Это то, что у меня есть:

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        actionStop = menu.findItem(R.id.action_stop);

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.appbar_menu, menu);

        
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        if(item.getItemId() == R.id.action_roll){
            rollDice();
            actionStop.setVisible(true);
        }

  

Я делаю это actionStop.setVisible(true); , чтобы изменить значение.
Однако я получаю эту ошибку:

  java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.MenuItem.setVisible(boolean)' on a null object reference
  

Комментарии:

1. Остальная часть сообщения об ошибке сообщит вам, какая строка вызвала ошибку. Начните с этого, чтобы выяснить проблему

Ответ №1:

Можете ли вы попробовать поместить эту строку

         actionStop = menu.findItem(R.id.action_stop);
  

после того, как меню было раздуто? и попробуйте использовать item для установки видимости вместо переменной?

ie,

 @Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.appbar_menu, menu);
    actionStop = menu.findItem(R.id.action_stop);
    
    return true;
}
    @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {

    if(item.getItemId() == R.id.action_roll){
        rollDice();
        item.setVisible(true);
    }
  

Комментарии:

1. Я больше не получаю ошибку, но видимость не меняется. Я думаю, это потому, что actionShop принадлежит другому элементу. Итак, в основном при нажатии на item1 измените видимость item2.

2. Изменение положения строки заставило его работать. Но видимость по-прежнему остается actionStop.setVisible