ListView wird erst aktualisiert, wenn die Tastatur ausgeblendet ist

8

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.

CustomDialogFragment.java

(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:

  • Hat jemand schon einmal ein ähnliches Problem gehabt (Konnte beim googeln keine Ressourcen finden: /)?
  • Warum passiert das?
  • Gibt es irgendetwas in den offiziellen Dokumenten?
  • Was ist der beste Weg, dies zu lösen?

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)

  1. Im Folgenden wird das Dialogfeldfragment angezeigt, und im Bearbeitungstext wurde kein Text eingegeben.

  2. Wenn ich jetzt "A" eintippe und die Liste auffüllt.

  3. 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.

  4. 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%     
Amyth 13.05.2015, 14:06
quelle

3 Antworten

0

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.

    
Ircover 13.05.2015 14:29
quelle
0

Im folgenden Code füllen Sie die Liste mit dem Ergebnis von commonMethods.getEmailContacts

%Vor%

Sicher musst du erst emailContacts.Clear() machen, sonst wird sich die Liste nicht ändern?

    
David Kibblewhite 13.05.2015 14:53
quelle
0

Versuchen Sie, alle emailContacts.clear (); zu löschen. Fügen Sie dann emailContacts.clear (); kurz vor emailContacts.addAll (commonMethods.getEmailContacts (appContext, textValue)); hinzu. Sie hängen Ihre Liste für jeden eingegebenen Buchstaben an.

    
I_A_Mok 14.05.2015 06:13
quelle