2012-07-07 26 views
10

he añadido un control de giro a mi Barra de acciones mediante la segunda opción de la respuesta here.Adición spinner a la Barra de acciones (no Navegación

Cómo agrego un adaptador giratorio a la ruleta? He intentado utilizar un objeto giratorio como Google describe here pero obtiene un objeto Spinner nulo

¿Alguien sabe cómo hacer esto? No quiero que el spinner esté en el área de navegación de la barra de acción pero con los otros elementos de acción (estoy usando la división barra de acción).

Gracias por la ayuda!

Respuesta

6

Bueno, abandoné la idea de Spinner para usar un submenú. Me di cuenta de que la ruleta era para seleccionar cosas que permanecían seleccionadas; submenús diseñados para ser un mejor ajuste de interfaz de usuario.

Gracias de todos modos.

P.S. Soy nuevo aquí. Si responder a mi propia pregunta es molesto para la comunidad, por favor avíseme. Quiero ser un buen ciudadano Ya he recibido mucha ayuda de todos ustedes.

15

Sé que abandonaste la ruleta, pero voy a dar algunas pistas aquí en caso de otras personas está teniendo el mismo problema o que vienen a desarrollar el mismo patrón en una aplicación diferente

  • Si tienes nula es porque no especificaste adecuadamente los ID. Verifica los IDs.
  • de los enlaces que mostraste sobre cosas complicadas especificando un actionLayout que solo es un spinner, solo puedes especificar un actionViewClass = "android.widget.Spinner" que hará el truco.
  • luego en la OnCreateOptionsMenu haces:

    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 
    

codificación feliz ...

+0

¿Alguna idea de cómo esto funcionaría para un adaptador personalizado? Estoy usando imágenes en lugar de palabras de texto para mostrar en el Spinner, por lo que la línea 'SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource (getActivity(). GetActionBar() .getThemedContext(), R.array.my_menu_spinner_list, android.R. layout.simple_spinner_dropdown_item); 'debe ser diferente para un adaptador personalizado. No puedo entender cómo. – Azurespot

+0

solo invoque el constructor que tenga en su adaptador personalizado. 'SpinnerAdapter mSpinnerAdapter = new MyCustomAdapter()' – Budius

+0

Gracias Budius, lo hice, pero por alguna razón el menú desplegable no sucede. Pensé que era porque 'android.R.layout.simple_spinner_dropdown_item' falta en mi adaptador personalizado (ya que utiliza una fila de Spinner como ImageView, un lugar donde entra la matriz de los drawables). Pero no estoy seguro de si ese es el problema. Si desea ver mi código: http://stackoverflow.com/questions/30433501/custom-spinner-not-showing-dropdown-in-actionbar-icon La pregunta sigue sin respuesta. Gracias. – Azurespot

27

Sé que esto es una cuestión de edad, pero por si acaso alguien tropieza en él (como lo hice) y aún busca una respuesta completa, aquí está cómo hacerlo usando la biblioteca de compatibilidad, para que funcione desde v7 (Android 2.1 Eclair) hasta v19 actual (Android 4.4 KitKat):

en 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> 

Usando http://schemas.android.com/apk/res-auto espacio de nombres de alias, tal como yourapp le permite utilizar el showAsAction atributos y actionViewClass que no existe en las versiones anteriores de Android.

Luego, en el código de la actividad:

@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à!

+1

Si no desea preocuparse por las versiones anteriores, entonces no es necesario el espacio de nombres de yourapp, puede trabajar con el espacio de nombres de Android. Además, esto funciona perfectamente bien con CursorLoaders. – lalitm

+0

Dado que en este momento Android 2.3.3 (API v10) todavía representa ~ 18% del mercado de Android (consulte el [Android Dashboard] (http://developer.android.com/about/dashboards/index.html) para obtener información actualizada números), pensé que era importante proporcionar la respuesta de compatibilidad. Pero tiene razón en que el espacio de nombres de Android es suficiente si su objetivo de SDK mínimo de aplicación es superior a Android 3.0 (API v11). –

+0

@lalitm si lo has notado, es para la biblioteca de compatibilidad. Definitivamente se requiere si pretendes ser BC. – frostymarvelous

-2
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 
Cuestiones relacionadas