2011-12-28 42 views
11

Estoy tratando de que mi spinner funcione como el elemento de la lista desplegable de la barra de acciones, pero parece que no puedo implementarlo, no hay muchos tutoriales para esto después de buscar en Google. Creo que es algo relacionado con .setListNavigationCallbacks(); línea de código, simplemente no tengo idea de cómo hacerlo funcionar desde esa línea en adelante.¿Cómo puedo agregar mi spinner a ActionBar?

// setup action bar for spinner 
    ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
    bar.setListNavigationCallbacks(); 

    Spinner spinner = (Spinner) findViewById(R.id.spinner1); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.tools_array_stopwatch, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener(this); 
} 

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
     long arg3) { 
    // TODO Auto-generated method stub 
    switch (arg2) { 
    case 0:  
     break; 

    case 1:     
     Intent countdown = new Intent(this, CountdownActivity.class); 
     startActivity(countdown);      
     break; 

    default :      
     break; 
    } 
} 

public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 

} 

Respuesta

18

Paso # 1: Deshágase de su Spinner.

Paso # 2: Deshágase de su OnItemSelectedListener.

Paso # 3: Proporcione su ArrayAdapter como el primer parámetro para setListNavigationCallbacks().

Paso # 4: Proporcione una implementación de ActionBar.OnNavigationListener como el segundo parámetro a setListNavigationCallbacks().

Paso # 5: En el método de devolución de llamada en tu onNavigationItemSelected()ActionBar.OnNavigationListener, hacer lo que sea que quieres hacer en base al cambio en el estado de la navegación (por ejemplo, ejecutar un FragmentTransaction).

Paso # 6: rediseñe su aplicación para que no inicie una actividad basada en esta selección de navegación, como lo está intentando arriba. Inicie la actividad desde un botón de la barra de herramientas u opción del menú de opciones, o use fragmentos para reemplazar (parte de) la IU en la actividad existente. La navegación de la lista y pestañas en la barra de acciones es y no para las actividades de inicio.

+0

"La navegación de listas y pestañas en la barra de acciones no es para iniciar actividades." ¿Por qué no se podría usar una barra de acciones para iniciar actividades? –

+0

@JerryBrady: los elementos de acción (es decir, los botones de la barra de herramientas) tienen mucho sentido para iniciar otras actividades. – CommonsWare

+1

@CommonsWare: Tiendo a estar de acuerdo, pero Google Maps parece violar groseramente este principio en ICS, cada entrada en la lista de navegación abre una actividad separada. No encuentro este comportamiento particularmente extraño; en cambio, lo que me deja perplejo es cómo lograron evitar que la ruleta reciba brevemente la etiqueta incorrecta cuando se toca un elemento. –

Cuestiones relacionadas