Ich versuche, die in Firebase gespeicherten Daten im Dropdown-Menü von AutoCompleteTextView anzuzeigen. Zu diesem Zweck verwende ich den ValueEventListener. Gemäß der Dokumentation von ValueEventListener,ValueEventListener funktioniert nicht wie erwartet
Sie können die OnDataChange() Methode verwenden, um eine statische Momentaufnahme der Inhalte zu einem bestimmten Pfad zu lesen, da sie zum Zeitpunkt der Veranstaltung bestanden. Diese Methode wird einmal ausgelöst, wenn der Listener angeschlossen ist, und erneut jedes Mal, wenn sich die Daten, einschließlich untergeordnete Elemente, ändern.
Leider in meinem Fall OnDataChange() wird nur dann ausgelöst, wenn die Daten der geändert wird (das heißt, wenn neue Daten hinzugefügt wird). Dies bedeutet, dass AutoCompleteTextView das Dropdown-Menü nicht anzeigt, ohne die Daten in Firebase zu ändern. Was ich will, ist für die onDataChange() zum ersten Mal auslösen, wenn der Listener aufgerufen wird und jedes Mal, wenn sich die Daten ändern. Ich würde gerne wissen, wo ich falsch liege. Der folgende Code erscheint innerhalb onCreateView von Fragment
daTags.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Basically, this says "For each DataSnapshot *Data* in dataSnapshot, do what's inside the method.
for (DataSnapshot tagNameSnapshot : dataSnapshot.getChildren()) {
//Get the suggestion by childing the key of the string you want to get.
String ValueTagName = tagNameSnapshot.child(getResources().getString(R.string.Child_AppData_Tags_TagName)).getValue(String.class);
//Add ValueTagName (Value pulled from Firebase for the above Key) to TagList
//Is better to use a List, because you don't know the size of the iterator returned by dataSnapshot.getChildren() to initialize the array
tagList.add(ValueTagName);
//Initialize AutoCompleteTextView and define Adapter
ArrayAdapter<String> adapterAutoComplete = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, tagList);
actv_tagName.setAdapter(adapterAutoComplete);
//Get TagsCount using dataSnapshot and display TagsCount in TextView
TagsCount = dataSnapshot.getChildrenCount() + "";
tv_tagsCount.setText(TagsCount);
}
});
Dank
Die 'onDataChange()' Methode wird tatsächlich einmal für die Anfangsdaten und dann wieder mit irgendwelchen Änderungen wie beschrieben ausgeführt. Ich vermute, dass das Problem mit AutoCompleteTextView und Adapter zu tun hat, obwohl ich keine Zeit habe, es zu testen. Versuchen Sie eine Log-Nachricht oder etwas in onDataChange zu setzen, um zu bestätigen, ob der onDataChange ausgeführt wird oder nicht. –
'onDataChange() {}' liefert keine Anfangsdaten. Nach dem Ändern der vorhandenen Daten (Hinzufügen neuer Daten) in der entfernten Datenbank funktioniert das 'onDataChange() {}' jedoch wie erwartet (wie in der obigen Frage erwähnt). Ich würde gerne wissen, was die 'onDataChange() {}' verursacht, um die Anfangsdaten nicht zurückzugeben. – user3314337
Wie haben Sie festgestellt, dass onDataChange beim ersten Mal nicht ausgelöst wird? –