2017-04-18 3 views
11

Ich habe eine Listview mit EditTexts in jeder Zelle. Immer, wenn ich Text zu dem Punkt hinzufüge, dass die EditText 1 Zeile wächst, scrollt die ListView nach oben (und entfernt normalerweise die EditText aus der Sicht, indem Sie dies tun).ListView Scrollt nach oben, wenn EditText wächst

Ich habe ein paar Fragen dazu, aber sie scheinen nur "Hacks" als Antworten und nichts, das für mich funktioniert.

ListView scrolls to top when typing in multi-line EditText

Listview with edittext - auto scroll on "next"

EDIT: Nach viel Forschung, ich habe festgestellt, dass es ist, weil die editText ist Ändern der Größe, wodurch das Listview-Layout seiner Subviews und dann an die Spitze zurückzusetzen. Ich möchte einen Weg finden, wie der EditText wächst, während er am selben Ort bleibt.

habe ich versucht, dies wegen eines Vorschlags fand ich online, aber, obwohl es die ListView auf der richtigen Höhe hält, löscht es den Fokus von den EditText und ich kann nicht scheinen, mit requestFocus zu kommen.

private Stirng getTextWatcher(){ 
return new TextWatcher(){ 
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { } 
@Override public void afterTextChanged(Editable s) { 
listView.setSelection(index); 
    } 
} 
} 

Also, was ich brauche, ist entweder:

  1. haben einen Weg für die ListView nicht automatisch nach oben zu bewegen, wenn die Subviews wieder werden verlegt oder

  2. A Möglichkeit, meine EditText nach dem Aufruf ListView.setSelected() oder 3. zu fokussieren. Haben Sie eine andere Möglichkeit, die ListView zu scrollen, die Fokus nicht von der EditText löschen wird.

Für Option

  1. I scrollTo() und smoothScrollToPosition() versucht haben. scrollTo funktioniert aus irgendeinem Grund, aber verbirgt bestimmte Elemente aus dem ListView (sie werden unsichtbar, nicht geladen). Und smoothScrollToPosition() erstellt eine Animation, wo die ListView nach oben springt und dann bringt es den Benutzer zurück zum Item (und macht es 2 oder 3 mal).
+0

Können Sie Ihren Code schreiben? Warum funktionieren diese Antworten nicht für dich? – legendof

+0

@legendof poste meinen Code für was? die Listenansicht? Es scheint mir ziemlich Standard zu sein. Nichts Besonderes. Ich mache nichts damit in Java, außer es zu füllen, nur im XML. Was ich meinte ist, dass all diese Hacks sind und ich etwas elegantes und effizientes wollen ... nicht etwas wie "scrolle die Listenansicht jedes Mal wenn ein Buchstabe hinzugefügt wird" – NickProvost

+0

Kannst du uns das XML Layout zeigen? Der Code für die Listenansicht, sowie die Eltern. Liegt es zufällig in einem ScrollView? –

Antwort

4

Als par meiner Ansicht nach, wenn Sie durch die Verwendung EditText Eingabe von ListView Artikel nehmen wollen, dann sollten Sie TextView anstelle EdiText und durch Klick auf TextView verwenden, sollten Sie öffnen und Eingaben Dialog mit EditText, die einfacher und gute Lösung . Handhabung von EditText Fokus in ListView ist variieren schwierig und Sie müssen extra Listeners für diese setzen.

ODER

Und wenn Sie Anzahl von Eingabefeld in Ihrer Benutzeroberfläche beschränkt haben/UX, dann können Sie EditText mit CustomListView unter Verwendung ScrollViews implementieren.

+0

Ich habe gerade Ihre Methode getestet. Der zweite funktionierte einwandfrei für mich. Was ich getan habe, war ein lineares Layout innerhalb einer Bildlaufansicht zu verwenden und meine Ansichten programmatisch in Java einzufügen. Es funktioniert großartig und die Scroll-Ansicht bleibt an ihrem Platz, wenn der Editiertext wächst. Vielen Dank. – NickProvost

0

Listview Scrolls nach oben Wann EditText wächst

ListView einige bekannte Einschränkungen im Zusammenhang mit Kinder Fokus hat.

Lösung

Warum versuchen Sie nicht RecyclerView statt ListView zu benutzen? Google hat RecyclerView als den Standard empfohlenen Weg für solche UI eingeführt. So benutzerdefinierte ListView oder Hacks Erz nicht mehr benötigt.

0

können Sie versuchen, dieses Attribut zu Ihrem ListView hinzu:

android:transcriptMode="normal" 

Dies macht automatisch Liste nach unten scrollen, wenn ein Datensatz Änderungsbenachrichtigung empfangen wird, und nur dann, wenn der letzte Artikel ist bereits auf dem Bildschirm sichtbar .

Lesen Sie mehr hier: attr_android:transcriptMode | Android Developers

+0

Ich habe das versucht. Definitiv nicht funktioniert – NickProvost

Verwandte Themen