1

I'm trying to create a spinner item in my menu bar via XML. My code is as follows,

res/layout/spinner_filter_results.xml

<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/results_filters"/>

res/menu/menu_results.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- Spinner not showing up -->
    <item
        android:id="@+id/menuFilter"
        android:title="@string/filter"
        android:actionLayout="@layout/spinner_filter_results"
        app:showAsAction="always">
    </item>

    <item
        android:id="@+id/iconHamburger"
        android:icon="@drawable/ic_menu_white_24dp"
        app:showAsAction="ifRoom|withText"
        android:title="@string/options">
        <menu>
            <item
                android:id="@+id/menu_settings"
                android:title="@string/settings"
                android:onClick="onMenuItemClick"></item>
            <item
                android:id="@+id/menu_logout"
                android:title="@string/log_out"
                android:onClick="onMenuItemClick"></item>
        </menu>
    </item>
</menu>

This shows up fine in the Android Studio designer, this is exactly what I want:

Menu bar in Android Studio

But on my phone it doesn't show up.

Menu bar on phone

I've looked to other Stack Overflow posts such as this one, but I still can't figure out why the above code doesn't work. Does anyone have any insight as to why it doesn't show up on my phone? Is this just a problem of my phone?(LG G4, Android 6.0, SDK 23)

EDIT 1: I turned on Show Layout Bounds on my phone. I see that the Menu item for the Spinner exists but it seems to be empty?

Empty Menu Item

Calseon
  • 325
  • 3
  • 18
  • 1
    Did You add the adapter to the spinner with items to display? - if not, it should remain invisible. – Pavel B. Mar 18 '19 at 16:42
  • Oh! No I didn't. There's no adapter for the spinner at all. I didn't know it requires one. I'll go look up how to do that. Thank you! – Calseon Mar 18 '19 at 16:44

1 Answers1

0

As per the comment by Pavel B., my problem was that I did not have an adapter for my spinner. In the XML I changed my menu item to use the default Spinner rather than my own custom layout, and then assigned the adapter in the onCreateOptionsMenu of my Activity.

res/menu/menu_results.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/menu_spinner"
        android:title="@string/filter"
        app:actionViewClass="android.widget.Spinner"
        app:showAsAction="always">
    </item>

    <item
        android:id="@+id/iconHamburger"
        android:icon="@drawable/ic_menu_white_24dp"
        app:showAsAction="ifRoom|withText"
        android:title="@string/options">
        <menu>
            <item
                android:id="@+id/menu_settings"
                android:title="@string/settings"
                android:onClick="onMenuItemClick"></item>
            <item
                android:id="@+id/menu_logout"
                android:title="@string/log_out"
                android:onClick="onMenuItemClick"></item>
        </menu>
    </item>
</menu>

Activity.java

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_results, menu);

        // Set up spinner menu item
        MenuItem menuItem = menu.findItem(R.id.menu_spinner);
        Spinner spinner = (Spinner)menuItem.getActionView();
        String[] items={"All","Item1","Item2","Item3", "Item4"};
        ArrayAdapter<String> adapter=new ArrayAdapter<>(this,R.layout.support_simple_spinner_dropdown_item,items);
        spinner.setAdapter(adapter);
        return true;
    }

It shows up as:

Spinner Menu Item

Calseon
  • 325
  • 3
  • 18