2011-12-13 12 views
17

Estoy tratando de establecer el índice del elemento que necesita ser seleccionado en la ruleta de forma predeterminada, pero siempre por defecto a 0 (primera partida)Barra de acciones desplegable Spinner artículo defecto es el primer artículo

actionBar.setDisplayShowTitleEnabled(false); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 

SpinnerAdapter spinnerAdapter = 
      new ArrayAdapter<String>(activity, android.R.layout.simple_spinner_dropdown_item, 
        names); 
int selectedIndex = actionBar.getSelectedNavigationIndex(); 
if (selectedIndex != targetIndex) { 
    actionBar.setSelectedNavigationItem(targetIndex); 
} 

Arriba si el bloque se llama siempre. Incluso después de configurar el índice 2, la próxima vez que lo compruebo, devuelve 0.

Editar: sospecho que getSelectedNavigationIndex proporciona el índice del elemento actionBar en lugar del elemento desplegable de Spinner. Si ese es el caso, ¿qué método establece el índice del elemento seleccionado dentro del menú desplegable?

+0

¿Has intentado simplemente probar ese método? Por ejemplo, crea spinner con tres elementos y activa el segundo sin usar ninguna condición. Funciona bien para mí. Eche un vistazo a [mi ejemplo] (http://stackoverflow.com/questions/9039045/how-to-set-active-item-in-the-action-bar-drop-down-navigation/9046460#comment11641511_9046460). – Roman

+1

Además, intente configurar su adaptador antes de obtener/configurar el navigationIndex, es decir, actionBar.setListNavigationCallbacks (adapter, this); – brk3

Respuesta

34

Asegúrese de llamar al método setListNavigationCallbacks antes de cambiar el elemento seleccionado. No puedo verlo en tu ejemplo, así que creo que ese es el problema.

Aquí se muestra un ejemplo:

actionBar = getActionBar(); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
actionBar.setListNavigationCallbacks(adapter, this); 
actionBar.setSelectedNavigationItem(position); 

Funciona en mi aplicación sin ningún problema.

1

¿Ha intentado utilizar shared prefences para guardar el valor de la ruleta seleccionada? He utilizado este código para guardar la selección usuarios con preferencias compartidas por lo que la próxima vez que abrieron la aplicación de la ruleta se establece en el último valor que eligieron:

Spinner Spinner = (Spinner) findViewById(R.id.Spinner); 
String[] spinnervalues = getSpinnervalues(); 
ArrayAdapter<CharSequence> spinnerAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, makes); 
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
Spinner.setAdapter(spinnerAdapter); 
int position = Utils.getIndex(getSpinnerval(), makes); 

Spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
     String selected = (String) parentView.getSelectedItem(); 
     Spinner Spinner = (Spinner) findViewById(R.id.Spinner); 
     String[] spinnervalues = Filter.this.getSpinnerval(selected); 
     ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(Filter.this, android.R.layout.simple_spinner_item, models); 
     spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     Spinner.setAdapter(adapter); 
    } 

    public void onNothingSelected(AdapterView<?> parentView) {} 
}); 

Spinner.setSelection(makeposition, true); 
int position = Utils.getIndex(getSpinnerval()); 
if (position >= 0) { 
    Spinner Spinner = (Spinner) findViewById(R.id.Spinner); 
    Spinner.setSelection(position, true); 
} 

Entonces el Util obtener:

public String getSpinnerval() { 
    return getSharedPreferences().getString("val", ""); 
} 

Modifiqué el código un poco para que no sea 100% correcto, pero puede darte una idea.

+1

Habló de ActionBar (de Honeycomb), no de Spinner :-) – Bourbon

+0

¿Quería usar 'spinnervalues' en lugar de' models'? –

Cuestiones relacionadas