1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. jskeletti, 23.03.2012 #1
    jskeletti

    jskeletti Threadstarter Erfahrener Benutzer

    Ich habe zwei Spinner die mit Werten aus einer Datenbank gefüllt werden. Wird in dem ersten Spinner ein Fahrzeughersteller ausgewählt, sollen im zweiten nur die dazugehörigen Fahrzeugmodelle auswählbar sein. Folgendermaßen habe ich das "gelöst":

    Code:
    try {
       c = getContentResolver().query(HerstellerTableContentProvider.CONTENT_URI, new String[] { HerstellerTableContentProvider._ID, HerstellerTableContentProvider.HERSTELLER }, null, null, HerstellerTableContentProvider.DEFAULT_SORT_ORDER);
    
    
       spHerstellerAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, new String[] { HerstellerTableContentProvider.HERSTELLER }, new int[] { android.R.id.text1 });
       spHerstellerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       spHersteller.setAdapter(spHerstellerAdapter);
                    
       Log.wtf("Test", String.valueOf(spHerstellerAdapter.getCount()));
    
       spHersteller.setOnItemSelectedListener(new OnItemSelectedListener() {
    
          @Override
          public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
             Log.d("onItemSelected()", "pos = " + pos + ", id = " + id);
    
             fillModelSpinner(id);
         }
    
         @Override
         public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub
          }
      });
    
      loadFahrzeugFromDatabase();
    
    } catch (Exception ex) {
         Log.e("onCreate()", ex.getMessage());
    
         ex.printStackTrace();
    
         finish();
    }
    
    Code:
    private void fillModelSpinner(long id) {
            Cursor c = null;
    
            try {
                c = getContentResolver().query(ModellTableContentProvider.CONTENT_URI, new String[] { ModellTableContentProvider._ID, ModellTableContentProvider.HERSTELLER_ID, ModellTableContentProvider.MODELL }, "hersteller_id = ?", new String[] { String.valueOf(id) }, ModellTableContentProvider.DEFAULT_SORT_ORDER);
    
                if (c != null) {
                    SimpleCursorAdapter spModellAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, new String[] { ModellTableContentProvider.MODELL }, new int[] { android.R.id.text1 });
    
                    spModellAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    spModell.setAdapter(spModellAdapter);
                }
            } catch (Exception ex) {
                Log.e("fillModelSpinner()", ex.getMessage());
    
                ex.printStackTrace();
    
                finish();
            }
        }
    
    Code:
    private void loadFahrzeugFromDatabase() {
    ...
       Cursor c = getContentResolver().query(FahrzeugeContentProvider.CONTENT_URI, FahrzeugeContentProvider.FAHRZEUGE_PROJECTION, "_id = ?", new String[] { String.valueOf(_id) }, ModellTableContentProvider.DEFAULT_SORT_ORDER);
       if ((c != null) && (c.getCount() == 1)) {
                    c.moveToFirst();
    
       spHersteller.setSelection(findPositionFromId(c.getInt(c.getColumnIndexOrThrow(FahrzeugeContentProvider.HERSTELLER)), spHersteller.getAdapter()));
        fillModelSpinner(c.getInt(c.getColumnIndexOrThrow(FahrzeugeContentProvider.HERSTELLER)));
    
       int p = findPositionFromId(c.getInt(c.getColumnIndexOrThrow(FahrzeugeContentProvider.MODELL)), spModell.getAdapter());
    
       spModell.setSelection(p);
    ...
    }
    
    Und jetzt das lustige: Wird die Activity gestartet, zeigt der zweite Spinner immer den ersten Wert in der Liste an. Gehe ich aber mit dem Debugger drüber, sehe ich dass der zweite Spinner auf den richtigen Wert gesetzt wird (bei int p ...) und auch nach dem spModell.setSelection(p) steht (laut Debugger) spModell auf dem richtigen Item. Gehe ich dann aber weiter und die Activity startet, steht dort wieder der erste Eintrag in der Liste. Ich habe sonst an keiner anderen Stelle auf die Spinner auch nur irgendwie verwiesen.

    In Verdacht habe ich aber den Zugriff auf die Datenbank bei c = getContentResolver().query(...). Ich verwende diese Zeile für beide Spinner und ich könnte mir vorstellen, dass das irgendwie zusammenhängt. Auch wenn Cursor c jedes mal neu angelegt wird.

    Weiß jemand Rat?
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Kommunikation mit Advatange Database Server Android App Entwicklung 29.11.2018
Problem mit variable.setText (für TextView) Android App Entwicklung 25.10.2018
MIT AppInventor App erstellen um PDFs zu öffnen, problem Android App Entwicklung 10.10.2018
Kosten/ Aufwand für ne Android App für Vereinsaufgaben? Android App Entwicklung 08.10.2018
Problem mit for-Schleife, delay und Margins Android App Entwicklung 08.10.2018
Hilfestellung Appentwicklung Android App Entwicklung 29.09.2018
Eintrag in einer Datenbank mithilfe einer ListView löschen Android App Entwicklung 20.06.2018
Android Studio: Auf Datenbank mit zwei Spinner zugreifen. Android App Entwicklung 07.06.2018
SQLite Datenbank mit zwei Tabellen erstellen Android App Entwicklung 30.05.2018
Was am besten für eine Datenbank benutzen? Android App Entwicklung 26.02.2018
Du betrachtest das Thema "Zwei spinner, 'ne Datenbank und 'n lustiges Problem" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.