2013-12-21 4 views
4

Недавно я переключился с ActionBarSherlock на Android Support Library ActionBar, и теперь я получаю нуль в представлении действия счетчика в панели действий.Невозможно получить представление действий для ActionBar MenuItem с помощью библиотеки поддержки

Вот код, как это было предложено docs:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.home_menu, menu); 
    MenuItem spinnerItem = menu.findItem(R.id.menuNavigateType); 
    View view = MenuItemCompat.getActionView(spinnerItem);// !! view is NULL !! 
     ... 
} 

Вот R.menu.home_menu:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:myapp="http://schemas.android.com/apk/res-auto"> 
    ... 
    <item 
    android:id="@+id/menuNavigateType" 
    myapp:showAsAction="always" 
    myapp:actionViewClass="android.support.v7.widget.Spinner" /> 
    ... 
</menu> 

Как получить мой взгляд действия?

Спасибо.

+0

Какой у вас счетчик xml? – user2511882

+0

Spinner определен в xml, который я разместил выше как actionViewClass. – aez

+1

U может захотеть посмотреть в пакете android.support.v7.widget, если есть какой-либо счетчик. Нет класса Spinner, поэтому вам нужно определить правильный путь к классу android.widget.Spinner, например. – Srneczek

ответ

3

Не уверен, но попробуйте следующее, вместо MenuItemCompat.getActionView(), используйте:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.home_menu, menu); 
    MenuItem spinnerItem = menu.findItem(R.id.menuNavigateType); 

    View view = spinnerItem.getActionView(); 
    // ... 
    if(view instanceof Spinner) { 
     final Spinner spinner = (Spinner) view; 
     // create your adapter 
     // ... 
     // set your adapter 
     spinner.setAdapter(adapter); 
    } 
} 

Также для вашего пункта, вместо android.support.v7.widget.Spinner:

<item 
    android:id="@+id/menuNavigateType" 
    myapp:showAsAction="always" 
    myapp:actionViewClass="android.widget.Spinner" > 

Я видел это решение здесь: Android ActionBar (ActionBarCompat) Spinner Dropdown list ?.
Сообщите мне, если это поможет вам.

+0

Спасибо Фило. У меня была такая же проблема с кодом, который вы показываете выше. Фактически, [docs] (http://developer.android.com/guide/topics/ui/actionbar.html) предлагает сделать это, как я показал в вопросе, который я опубликовал. – aez

+0

Да, я знал это. Обычно вы должны делать то же, что и вы, но что-то не так в этом случае с «AppCompat». Итак, у вас такая же проблема с этим примером? Измените свой вопрос и разместите макет своего счетчика (как сказал @ user2511882). У вас был ловушка? – Fllo

+0

@Filo, извините, я был неправ, вы правы, ваше решение сработало. Я пропустил пространство имен «myapp» для всех элементов в моем xml. Благодарю. – aez

0

Ошибка объясняется, вероятно, отсутствием поддержки библиотеки support.v7. Просто не используйте myapp. Вместо этого:

<item android:id="@+id/menuNavigateType" 
     android:showAsAction="always" 
     android:actionViewClass="android.widget.Spinner"/> 
Смежные вопросы