Ich habe ein DialogFragment
und in seinem Layout habe ich ein EditText
und ein ListView
. Der ListView zeigt im Grunde die Liste der Kontakte (Anfangs hat diese Liste 0 Einträge). Wenn der Wert von edittext
aktualisiert wird, fülle ich die Liste mit Kontakten, bei denen text
in EditText
eingegeben wurde.
Am EditText
habe ich ein addTextChangedListener
verwendet, um die Liste mit den gewünschten Kontakten zu aktualisieren, wenn der Benutzer einen Namen oder eine E-Mail-Adresse des Kontakts eingibt.
Das seltsame Problem, vor dem ich stehe, ist, dass die Liste (oder vielleicht das Layout) nur aktualisiert wird, wenn ich die Zurück-Taste drücke, um die Tastatur nach der Eingabe auszublenden. Solange die Soft-Tastatur angezeigt wird, wird die Liste nicht aktualisiert (außer beim ersten Mal, wenn Elemente zur leeren Liste hinzugefügt werden).
Nachfolgend finden Sie einen Teil des Codes zum besseren Verständnis.
(in onCreateView):
%Vor%in onContactNameSearch (TextWatcher):
%Vor%Ich gehe davon aus, dass die Liste des Listenadapters korrekt aktualisiert wurde, aber aus irgendeinem Grund spiegelt das Layout die neuen Änderungen nicht wider, bis die Softtastatur ausgeblendet ist.
Fragen:
PS: Der Code in der afterTextChanged
-Methode war zuvor in der onTextChanged
-Methode und ich hatte das gleiche Problem.
UPDATE (Screenshots zum besseren Verständnis hinzugefügt)
Im Folgenden wird das Dialogfeldfragment angezeigt, und im Bearbeitungstext wurde kein Text eingegeben.
Wenn ich jetzt "A" eintippe und die Liste auffüllt.
Ich füge noch ein paar Buchstaben hinzu, aber die Liste wird nicht aktualisiert. Ich habe Buchstaben "mit" hinzugefügt, so dass die Abfrage jetzt "Amit" wird, aber keine Änderung in der Liste.
Jetzt, wenn ich die Hardware-Zurück-Taste auf dem Gerät drücke, um die Tastatur auszublenden. Die Tastatur ist ausgeblendet und die Liste wird aktualisiert.
(Bitte beachten Sie die überlappenden Kontaktnamen und E-Mails, noch müssen Sie das Layout korrigieren: P)
UPDATE2 (Hinzufügen des EmailContactAdapter-Codes)
Im Folgenden finden Sie die EmailContactAdapter-Klasse
%Vor% Sie versuchen, die sichtbare Liste zu ändern, indem Sie emailContacts
ändern, aber der Adapter enthält noch alte Listendaten.
Lösung: nach jedem neuen Text in EditText
neue Adapter erstellen (ist ein sehr schlechter Weg), oder erstellen Sie Methode in EmailContactAdapter
, um Elemente zu ersetzen - in Ihrem Fall contacts
-Feld.
Im folgenden Code füllen Sie die Liste mit dem Ergebnis von commonMethods.getEmailContacts
Sicher musst du erst emailContacts.Clear()
machen, sonst wird sich die Liste nicht ändern?
Tags und Links android android-dialogfragment android-listview