2010-12-08 27 views
6

Soy nuevo en el desarrollo de Android. Estoy tratando de poblar un spinner usando el SimpleAdapter. Pero la lista de spinner muestra un elemento en blanco. Cuando hago clic en cualquier elemento, su texto se muestra correctamente en Toast. Por favor, dime cuál es el problema en mi código a continuación.Uso de SimpleAdapter con Spinner

public void onCreate(Bundle savedInstanceState) { 

    private List<Map<String, String>> data = new ArrayList<Map<String, String>>(); 

    String[] from = new String[] { "colorsData" }; 
    int[] to = new int[] { R.id.spinner }; 

    String[] colors = getResources().getStringArray(R.array.colorsData); 

    for (int i = 0; i < colors.length; i++) { 
    data.add(addData(colors[i])); 
    } 

    Spinner spinner = (Spinner) findViewById(R.id.spinner); 

    SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, android.R.layout.simple_spinner_item, from, to); 
    simpleAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(simpleAdapter); 

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, 
    int position, long id) { 
    Toast.makeText(
     parent.getContext(), 
     "Selected Color:- " 
     + parent.getItemAtPosition(position), 
     Toast.LENGTH_LONG).show(); 
    } 
    }); 
} 

private Map<String, String> addData(String colorName) { 
    Map<String, String> mapList = new HashMap<String, String>(); 
    mapList.put("colorsData", colorName); 
    return mapList; 
} 
+0

Con un breve vistazo a su pregunta, no estoy seguro de lo que realmente desea obtener. Pero si desea algunos elementos de la interfaz de usuario como página de configuración en Android. es decir: haga clic en un elemento en una vista de lista y abra un cuadro de diálogo para seleccionar algo, puede probar "Preferencia". La preferencia es una serie de elementos de la interfaz de usuario para configurar su aplicación. –

Respuesta

5

estoy alrededor del 95% seguro de que la matriz to debe declararse como:

int[] to = new int[] { android.R.id.text1 }; 

Inténtelo.


EDITAR (basado en los comentarios a continuación):

Parece que hubo un error en las versiones anteriores de AndroidOS lo que provocó que IllegalStateException. (No vi la excepción en 2.2, pero sí la vi en 1.5 en el emulador). El error puede solucionarse agregando un ViewBinder al SimpleAdapter. ViewBinder no es difícil de implementar; he aquí un ejemplo:

SimpleAdapter.ViewBinder viewBinder = new SimpleAdapter.ViewBinder() { 

     public boolean setViewValue(View view, Object data, 
       String textRepresentation) { 
      // We configured the SimpleAdapter to create TextViews (see 
      // the 'to' array), so this cast should be safe: 
      TextView textView = (TextView) view; 
      textView.setText(textRepresentation); 
      return true; 
     } 
    }; 
    simpleAdapter.setViewBinder(viewBinder); 

blogged sobre este here.

+0

Lo probé. Pero tan pronto como hago clic en el botón desplegable de la rueda giratoria, se bloquea con una IllegalStateException. – Chromium

+0

¿Pero realmente está viendo las etiquetas de texto ahora? Creo que esa excepción significa que algo cambió en la lista de 'datos' después de haber creado el adaptador. ¿Es eso posible? –

+0

No, no estoy cambiando la lista de datos. Ahora no sé si SimpleAdapter se puede usar para poblar la ruleta o no. – Chromium