Nano Hash - криптовалюты, майнинг, программирование

findViewById для MenuItem возвращает значение null

Это мой xml-файл для меню ActionBar.

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
            android:id="@+id/fav_button"
            android:title="Favourite"
            android:icon="@drawable/unstar"
            android:showAsAction="always|withText" />
</menu>

В моей функции onCreate после вызова setContentView. Я делаю favButton = (MenuItem) this.findViewById(R.id.fav_button); Но это возвращает ноль.

Но возвращает правильный объект в функции onOptionsItemSelected.

Я использую ActionBarSherlock, если это имеет значение.

Я пробовал различные варианты, предложенные другими findViewById, возвращает нулевые вопросы, но они не решили мою проблему.



Ответы:


1

Вместо

favButton = (MenuItem) this.findViewById(R.id.fav_button);  

в onCreateOptionsMenu после getMenuInflater().inflate(R.menu.activity_main, меню);

favButton = menu.findItem(R.id.fav_button);
11.05.2013
  • Нет ли способа получить его во время onCreate? Я хотел бы иметь возможность setChecked() на основе пакета saveInstanceState. В качестве альтернативы, есть ли лучший способ сохранить проверенное состояние MenuItem при поворотах? 21.02.2015
  • Могу ли я сделать это в onCreate? 12.11.2015
  • Он по-прежнему равен нулю, пока не будет выбран 12.11.2015
  • mMenu = (Меню) findViewById(R.id.menuBar); mMenuItem = mMenu.getItem(2); mMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); mMenuItem.setVisible (истина); в этом mMenu возвращает ноль 15.01.2016

  • 2

    Используйте menu.findItem(), чтобы получить меню. Но это нужно делать после того, как меню будет раздуто.

    Кроме того, чтобы ответить на ваш вопрос в комментарии, вы можете использовать onPrepareOptionsMenu для установки состояния вашего меню. Если это меню обновляется один раз, вы также можете использовать onCreateOptionsMenu, который вызывается только один раз.

    20.05.2015

    3

    но если кому-то очень нужен View а не MenuItem (для разных манипуляций, например для запуска анимации) то все равно можно получить следующим образом:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.your_menu_xml_file, menu);
        ...
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                view = findViewById(R.id.menu_refresh_button);
                // view.startAnimation(animation);
            }
        });
        return true;
    }
    
    24.03.2018
  • post полезен для startAnimation, а не потому, что вы использовали findViewById. т.е. без startAnimation нет необходимости использовать post. Соглашаться ? 13.04.2020

  • 4

    Пытаться

            final Toolbar toolbar = findViewById(R.id.toolbar);
            Menu menu=toolbar.getMenu();
            MenuItem item = menu.findItem(R.id.'name id item');
    

    для меня работает.

    11.03.2020
  • Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную краткосрочную помощь. Надлежащее объяснение значительно улучшило бы его долгосрочную ценность, показав, почему это хорошее решение проблемы проблему, и сделает ее более полезной для будущих читателей с другими подобными вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить некоторые пояснения, включая сделанные вами предположения. 11.03.2020
  • developer.android.com/reference/android/widget/Toolbar имеет метод getMenu(), который возвращает меню, отображаемое на панели инструментов. 12.03.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..