How to create a spinner to use as an action element?

(Android 3.0+) How to create a Spinner to use as an action element for Android Honeycomb Action Bar? I understand that LIST mode in Action Bar mode pretty much does this, but I would like to use its TAB mode. Since, as far as I know, I cannot use both parameters at the same time, I am trying to use spinner as an action element.

Here is java:

@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.spin_menu, menu); Spinner spin = (Spinner) findViewById(R.id.spin_widget); ArrayAdapter<CharSequence> spinAdaptor = ArrayAdapter.createFromResource( this, R.array.spinlist, android.R.layout.simple_spinner_item); spinAdaptor.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spin.setAdapter(spinAdaptor); return super.onCreateOptionsMenu(menu); } 

Errors do not appear in eclipse, but running the program leads to closing force. Any suggestions for an absolute beginner?

Update - Added logcat error severity log: (At least this is what I think)

06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): FATAL EXCEPTION: main
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): java.lang.NullPointerException
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): at me.ics.icsActivity.onCreateOptionsMenu (icsActivity.java:84)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): at android.app.Activity.onCreatePanelMenu (Activity.java:2389)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): on com.android.internal.policy.impl.PhoneWindow.preparePanel (PhoneWindow.javahaps47)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): on com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu (PhoneWindow.java:647)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): at com.android.internal.policy.impl.PhoneWindow $ 2.run (PhoneWindow.java:2581)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): on android.os.Handler.handleCallback (Handler.java►87)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): at android.os.Handler.dispatchMessage (Handler.java:92)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): at android.os.Looper.loop (Looper.java:132)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): at android.app.ActivityThread.main (ActivityThread.java:4025)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): at java.lang.reflect.Method.invokeNative (native method)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): at java.lang.reflect.Method.invoke (Method.java:491)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:841)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): at com.android.internal.os.ZygoteInit.main (ZygoteInit.java►99)
06-27 18: 36: 59.496: ERROR / AndroidRuntime (493): at dalvik.system.NativeStart.main (native method)

+4
source share
2 answers

I assume that you do not have a Spinner whose android:id is R.id.spin_widget .

If you are trying to put Spinner as an action element, as your question says, you will not get Spinner via findViewById() , but rather getActionView() in MenuItem in the question. Here is an example project demonstrating this, implemented in a way that will work on Honeycomb, but also successfully skip this code on older versions of Android.

+1
source

I was looking for something like what you want to do. This answer works great: fooobar.com/questions/180226 / ...

I'm doing it:

my_action_bar.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <Spinner android:id="@+id/menu_spinner_pictures" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:entries="@array/types_view" /> </RelativeLayout> 

MainPanelActivity.java

  protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Configure ActionBar ActionBar actionBar = getActionBar(); View spinner = getLayoutInflater().inflate(R.layout.my_action_bar, null); actionBar.setCustomView(spinner); actionBar.setDisplayShowCustomEnabled(true); (...) 
0
source

All Articles