2015-03-22 3 views
2

Я делаю приложение для Android и пытаюсь применить код java к элементам меню xml, но они не накачаны. У меня есть некоторые пункты меню, определенные в моем файл меню XML (хранится в Резе/меню/main.xml) определяются следующим образом:Элементы меню Android, которые никогда не накачиваются

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context=".HomeActivity" 
    app:showAsAction="always"> 

    <item android:id="@+id/action_close" 
      android:title="Close" 
      android:icon="@drawable/exitediting" 
      android:enabled="false" 
      app:showAsAction="always"/> 

    <item android:id="@+id/action_edit" 
      android:title="Edit" 
      android:icon="@drawable/editbutton" 
      android:enabled="false" 
      app:showAsAction="always"/> 

    <item android:id="@+id/action_mainedit" 
      android:title="MainEdit" 
      android:icon="@drawable/exitediting" 
      android:enabled="true" 
      app:showAsAction="always"/> 

</menu> 

В моем основном коде активности Java, то я переопределить инфлятор меню следующим образом:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    createAnimatorSets(); 
    return true; 
} 

Тогда в моей функции createAnimatorSets я пробую и получить доступ к кнопкам, как этот

final ActionMenuItemView editButton = (ActionMenuItemView) toolbar.getChildAt(1).findViewById(R.id.action_edit); 
final ActionMenuItemView closeButton = (ActionMenuItemView) toolbar.getChildAt(1).findViewById(R.id.action_close); 
final ActionMenuItemView mainButton = (ActionMenuItemView) toolbar.getChildAt(1).findViewById(R.id.action_mainedit); 

Это просто возвращает нуль. Я попытался поставить точку прерывания в этот момент в коде и посмотреть несколько переменных. R.id.action_edit возвращает id, как ожидалось, но оба findViewById (R.id.action_edit) и toolbar.getChildAt (1) .findViewById (R.id.action_edit) возвращают значение null. Сама панель инструментов (панель имен переменных) находится там, и кнопки хранятся внутри, но по какой-то причине они не накачаны, чтобы их можно было использовать. Я также пытался сделать это в методе onStart, а не onCreate, но это тоже не работает. Кто-нибудь знает, как это исправить.

Благодаря

+0

Попробуйте добавить sethasoptionsmenu (true) по методу oncreate – Catalina

+0

@ Каталина Я видел это где-то еще, когда пытался ее решить. Этот метод применим только к фрагментам, а не к основной деятельности. – kabeersvohra

ответ

0

Итак, после много испытаний кажется, что меню только накачивается в onResume. Это привело к очень хакерскому решению моей проблемы, но в будущем, если люди борются с этим, вам нужно сделать свой материал в onresume и просто установить кнопки в скрытые первоначально в xml, если это необходимо, как я сделал

0

Вы можете получить ссылку на ваши MenuItems в методе onCreateOptionsMenu(Menu menu) с помощью

MenuItem edit = menu.findItem(R.id.action_edit); 
View actionViewEdit = edit.getActionView(); 

когда вы раздули ваше меню.

+0

Благодарим вас за ввод. Я пробовал это, и menu.findItem фактически возвращает объект menuitemimpl, но затем метод getactionview все еще возвращает null – kabeersvohra

Смежные вопросы