Dynamische DropDown Felder aus mySQL Datenbank

  • 4 Antworten
  • Letztes Antwortdatum
N

.noname

Neues Mitglied
1
Guten Tag,
ich habe eine mySQL Datenbank erstellt und mit Daten gefüllt. (Bundesland, Stadt etc...) Jetzt würde ich sehr gerne ein DropDown Feld erstellen, welches die Daten aus der Datenbank zieht. Im zweiten Schritt hätte ich gerne ein zweites DropDown Feld, welches sich auf das erste bezieht.

Zum Beispiel:
Erstes DropDown ist befuellt mit Bundesländern, wähle ich dort Hessen aus kann ich im zweiten DropDown nur Städte aus Hessen auswählen.

Ich hab bis jetzt nur ein statisches DropDown Feld erstellt. Die Bundesländer sind per Hand eingetragen.

Wie gehe ich da am besten vor ?
 
@Kardroid hat recht. An ein Adabter die Daten binden. Danach kann man die Daten verändern. Der Spinner sollte sich dann anpassen. Und sonst gibts noch ein adapter.notifyDataSetChanged() was ein updaten des Spinners oder jeder anderen Liste bewirken sollte.
 
Guten Abend,

ich stehe vor dem gleichen Problem.:confused:

Hatte auch bereits auf etlichen Seiten im Internet nach den beiden Stichworten "Spinner" und "ArrayAdapter" gesucht die Kardroid in seiner Antwort gepostet hat - leider ohne Durchbruch.

Vielleicht kurz zum Hintergrund (Damit man weiß was Ich beabsichtige, eventuell ist die Chance dann höher das man mir aus meiner Verzweiflung helfen kann:biggrin:):
Der User soll Daten von einem Fußballverein sehen können.
Damit er im ersten moment nicht erschlagen wird von der Auswahl der etlichen Vereine in Europa, soll er ersteinmal filtern in welcher Liga der gewünschte Verein spielt...

Ich habe hier also meinen einen Spinner den ich statisch, in der strings.xml-Datei, befüllt habe mit den verschiedenen Fußballligen (1.Bundesliga, 2.Bundesliga, Barclays Premier League, Ligue 1, etc.).

[...]
<string-array name="Fussballliga">
<item >1.Bundesliga</item>
<item >2.Bundesliga</item>
<item >Barclays Premier League</item>
<item >Ligue 1</item>
...
</string-array>
[...]

Nun habe ich unter den ersten Spinner meinen zweiten Spinner, der darauf reagieren soll was in dem ersten Spinner ausgewählt wurde.
Wählt der User also für den ersten Spinner "1.Bundesliga" aus, so sollen beim zweiten Spinner nur Verein erscheinen die auch in der 1.Bundesliga spielen.

Ich weiß allerdings nicht wie ich quasi die Verbindung hinbekomme für:
Wenn bei Fussballliga: "1.Bundesliga" steht dann zeige nur die Einträge die quasi mit "1.Bundesliga" verknüpft sind... in meinem "jugendlichen Wahnsinn" stelle ich es mir also IN ETWA so vor:

[...]
Spinner2:
WENN Spinner1 = "1.Bundesliga" DANN ZEIGE ALS ARRAY(name=1.Bundesliga)
...
<string-array name="1.Bundesliga">
<item >Bayern München</item>
<item >Dortmund</item>
<item >Hannover</item>
<item >Leverkusen</item>
...
</string-array>
[...]

Ich weiß natürlich das statisch nicht so optimal ist aber ich würde es gerne erstmal "statisch" hinbekommen und später soll es dann in Verbindung mit einer SQL-Datenbank funktionieren bei dem die Einträge der Spinner nicht statisch im Projekt drin stehen, sondern er sich die Daten wiegesagt aus der SQL-Datenbank holt - aber das wird ein anderes Thema sein:biggrin:.

Ich HOFFE irgendjemand kann mir helfen bei diesem Problem(chen) ???

VIELEN DANK schonmal im vorraus !!! :smile:


Kneteknilch
 
Hallo Kneteknilch,

du könntest für deinen speziellen Fall auch CustomAdapter benutzen, oder auch Objekte definieren, die die 1 zu n Verknüpfung speichern.

Trotzdem habe ich mal ein kleines Beispiel gemacht, in dem ich deinen Fall sehr prototypisch und hässlich implementiert habe.

View:
Code:
<Spinner android:id="@+id/spinner_1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"></Spinner>

    <Spinner android:id="@+id/spinner_2"
        android:layout_marginTop="100dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"></Spinner>
Strings.xml
Code:
<string-array name="Fussballliga">
        <item >1. Bundesliga</item>
        <item >2.Bundesliga</item>
        <item >Barclays Premier League</item>
        <item >Ligue 1</item>
    </string-array>

    <string-array name="bundesliga_1">
        <item >Bayern München</item>
        <item >Dortmund</item>
        <item >Hannover</item>
        <item >Leverkusen</item>
    </string-array>

    <string-array name="bundesliga_2">
        <item >Köln</item>
        <item >Kaiserslautern</item>
    </string-array>
AndroidCode:
Code:
Spinner spinner = (Spinner) findViewById(R.id.spinner_1);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.Fussballliga, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        final Spinner spinner2 = (Spinner) findViewById(R.id.spinner_2);

        final ArrayAdapter<CharSequence> adapterBundesliga = ArrayAdapter.createFromResource(MainActivity.this,
                R.array.bundesliga_1, android.R.layout.simple_spinner_item);

        adapterBundesliga.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        final ArrayAdapter<CharSequence> adapterZweiteBundesliga = ArrayAdapter.createFromResource(MainActivity.this,
                R.array.bundesliga_2, android.R.layout.simple_spinner_item);

        adapterZweiteBundesliga.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);


        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                if(position == 0)
                {
                    spinner2.setAdapter(adapterBundesliga);
                }
                else if(position == 1)
                {
                    spinner2.setAdapter(adapterZweiteBundesliga);
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

Auf einem Produktivsystem würde ich es direkt anders programmieren. Bitte diese Lösung nur als Proof of Concept sehen.
 
Zurück
Oben Unten