Добавление spinner в ActionBar (не Навигация

Я добавил spinner в свой ActionBar, используя второй вариант из ответа здесь.

Как добавить адаптер прядильщика в прядильщик? Я попытался использовать объект Spinner, поскольку Google описывает здесь, но получает нулевой объект Spinner.

Кто-нибудь знает, как это сделать? Я не хочу, чтобы spinner находился в области навигации на панели действий, но с другими элементами действия (я использую панель действий split).

Спасибо за помощь!

Ответ 1

Ну, я отказался от идеи Spinner для использования подменю. Я понял, что счетчик был для выбора вещей, которые оставались выбранными; подменю закруглено, чтобы лучше подходить к пользовательскому интерфейсу.

Ответ 2

Я знаю, что это старый вопрос, но на всякий случай кто-то наткнулся на него (как и я) и все еще ищет полный ответ, вот как это сделать, используя библиотеку совместимости, чтобы он работал с v7 (Android 2.1 Eclair) на текущий v19 (Android 4.4 KitKat):

В menu_layout.xml:

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

  <item android:id="@+id/spinner"
    yourapp:showAsAction="ifRoom"
    yourapp:actionViewClass="android.widget.Spinner" />
</menu>

Использование http://schemas.android.com/apk/res-auto пространства имен, псевдонимого как yourapp, позволяет использовать атрибуты showAsAction и actionViewClass, которые не существуют в более старых версиях Android.

Затем в вашем действии:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_layout, menu);
    MenuItem item = menu.findItem(R.id.spinner);
    Spinner spinner = (Spinner) MenuItemCompat.getActionView(item);
    spinner.setAdapter(adapter); // set the adapter to provide layout of rows and content
    spinner.setOnItemSelectedListener(onItemSelectedListener); // set the listener, to perform actions based on item selection

Et voilà!

Ответ 3

Я знаю, что вы удалили spinner, но я дам несколько подсказок здесь, если у других людей есть такая же проблема, или вы приходите к разработке того же шаблона в другом приложении.

  • Если вы получили нуль, это потому, что вы не указали правильные идентификаторы. Дважды проверьте идентификаторы.
  • на ссылках, которые вы показывали по сложным материалам, указав actionLayout, который является просто spinner, вы можете просто указать actionViewclass= "android.widget.Spinner", который сделает трюк.
  • то в OnCreateOptionsMenu вы выполните:

    inflater.inflate(R.menu.my_menu, menu); // inflate the menu
    Spinner s = (Spinner) menu.findItem(R.id.my_menu_spinner).getActionView(); // find the spinner
    SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActivity().getActionBar()
            .getThemedContext(), R.array.my_menu_spinner_list, android.R.layout.simple_spinner_dropdown_item); //  create the adapter from a StringArray
    s.setAdapter(mSpinnerAdapter); // set the adapter
    s.setOnItemSelectedListener(myChangeListener); // (optional) reference to a OnItemSelectedListener, that you can use to perform actions based on user selection
    

счастливое кодирование...

Ответ 4

inflater.inflate(R.menu.my_menu, menu); // inflate the menu 

Spinner s = (Spinner) menu.findItem(R.id.my_menu_spinner).getActionView();     // find the spinner 
SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActivity().getActionBar() .getThemedContext(), R.array.my_menu_spinner_list, android.R.layout.simple_spinner_dropdown_item);    // create the adapter from a StringArray 
s.setAdapter(mSpinnerAdapter);   // set the adapter 
s.setOnItemSelectedListener(myChangeListener);    // (optional) reference to a OnItemSelectedListener, that you can use to perform actions based on user selection