Pregunta

Soy nuevo en el desarrollo de Android. Estoy tratando de llenar un control de giro mediante el uso de la SimpleAdapter. Pero la lista de ruleta está mostrando elemento en blanco. Cuando hago clic en cualquier elemento, el texto se muestra correctamente en la tostada. Por favor, dime cuál es el problema en mi código de abajo.

 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;
 }
¿Fue útil?

Solución

Estoy cerca de 95% seguro de que la matriz to debe declararse como sigue:

  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 yo lo vi en 1,5 en el emulador.) El error se puede evitar mediante la adición de un ViewBinder a la SimpleAdapter. ViewBinder no es difícil de poner en práctica; 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);

aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top