Ich versuche, eine dynamische Dropdown-Liste zu erstellen, die von einer SQLite-Tabelle ausgefüllt wird. Ich habe ein Cursor-Objekt, mit dem ich die Daten abrufen kann, die ich brauche. Ich konnte die Werte mit dem folgenden Code in das Drop-down-Menü laden:
%Vor%Mein Problem ist, dass ich eine Auswahl aus der Dropdownliste benötige, die auch die ZeilenID des ausgewählten Elements enthält. Ich muss in der Lage sein, ein Element auszuwählen und Zugriff auf den Wert dieses Elements im Back-End zu haben. Stellen Sie sich beispielsweise ein Drop-down in HTML vor. Jede Dropdown-Auswahl hat ihren eigenen versteckten Wert, der gezogen wird. Ich brauche diesen Wert, um für mich verborgen zu bleiben, damit ich weiß, welche ID sie wählen.
Versuchen Sie es mit SimpleCursorAdapter
, anstatt alle Daten von Hand in ein ArrayAdapter
zu kopieren.
Das ist eine alte Frage, aber die erste, die ich gefunden habe, als ich dieses Problem herausgefunden habe. Hier ist eine detaillierte Erklärung mit vollständiger Quelle, die einige Beinarbeit machen könnte.
Die Antwort ist in der Tat, einen SimpleCursorAdapter zu verwenden, der eine Liste von Strings behandelt, aber auch eine spezielle Behandlung für ein passendes ID-Feld hat, das zurückgegeben wird, wenn eine Zeile ausgewählt wird. Der Schlüssel zu dieser Arbeit besteht darin, die folgenden zwei obskuren Informationen zu kennen:
1) Stellen Sie beim Erstellen des Cursors sicher, dass die Abfrage ein Feld mit dem Titel "_id" zurückgibt. Dieses Feld muss nicht überall angezeigt werden, aber der Wert wird zurückgegeben, wenn ein Listenelement ausgewählt wird.
2) Wenn Sie einen SimpleCursorAdapter erstellen, müssen Sie die TextView-Layout-IDs angeben, in denen der Zeilentext platziert wird. Wenn Sie das android-gelieferte Layout android.R.layout.simple_spinner_item verwenden, müssen Sie die zu verwendende Text-ID android.R.id.text1 verwenden.
Main.xml
%Vor%Aktivitätscode:
%Vor%Hier ist eine andere Antwort mit Loadern und Cursorn.
Bei der Erstellung von Aktivitäten / Fragmenten (das Fragment / die Aktivität muss LoaderManager.LoaderCallbacks<Cursor>
implementieren):
In Ihrer Aktivität / Fragment:
%Vor%Hier ist der Cursor-Adapter:
%Vor%Hier ist der Cursor loader:
%Vor%Mit diesem erhalten Sie: