2010-12-08 5 views
6

Ich bin neu in Android-Entwicklung. Ich versuche, einen Spinner mit dem SimpleAdapter zu füllen. Die Liste der Spinner zeigt jedoch ein leeres Element. Wenn ich auf ein Element klicke, wird sein Text in Toast richtig angezeigt. Bitte sagen Sie mir, was das Problem in meinem Code unten ist.Verwendung von SimpleAdapter mit 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

Mit einem kurzen Blick auf Ihre Frage, ich bin mir nicht sicher, was Sie wirklich wollen. Aber wenn Sie einige UI-Elemente wie Seite in Android konfigurieren möchten. Beispiel: Klicken Sie auf ein Element in einer Listenansicht und wählen Sie einen Dialog aus, um etwas auszuwählen. Sie können "Präferenz" versuchen. Vorzug ist eine Reihe von UI-Elementen zum Konfigurieren Ihrer App. –

Antwort

5

Ich bin etwa 95% sicher, dass Ihre to Array sollte als deklariert werden:

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

dass versuchen.


EDIT (basierend auf Kommentare unten):

Es scheint, es ist ein Fehler in älteren Versionen von AndroidOS war die, dass Illegal verursacht. (Ich habe die Ausnahme in 2.2 nicht gesehen, aber ich habe es in 1.5 im Emulator gesehen.) Der Fehler kann umgangen werden, indem man dem SimpleAdapter einen ViewBinder hinzufügt. ViewBinder ist nicht schwer zu implementieren; hier ist ein Beispiel:

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); 

ich diesen here gebloggt.

+0

Ich habe es versucht. Aber sobald ich auf die Dropdown-Schaltfläche für den Spinner klicke, stürzt es mit einer IllegalStateException ab. – Chromium

+0

Aber sehen Sie jetzt tatsächlich die Textbeschriftungen? Ich denke, dass diese Ausnahme bedeutet, dass sich etwas in der "Daten" -Liste geändert hat, nachdem Sie den Adapter erstellt haben. Ist das möglich? –

+0

Nein, ich ändere die Datenliste nicht. Ich wüsste jetzt, ob SimpleAdapter verwendet werden kann, um den Spinner zu bevölkern oder nicht. – Chromium