Ich habe eine Listenansicht in meiner Bildlaufansicht unter fast einer Seite, die es wert ist, davor zu blättern, aber sobald meine Listenansicht gefüllt ist, bewegt sich die Bildlaufleiste an den Anfang der Listenansicht. Wie kann ich das beheben / dies verhindern?
SCROLL VIEW XML:
%Vor%Ich habe es versucht sv.fullScroll (ScrollView.FOCUS_UP); und all das Zeug zu meinem Scrollview, aber es funktioniert nicht
Zuerst haben Sie wahrscheinlich schon davon gehört, aber nur für den Fall: Sie sollten nie ein ListView
in ein ScrollView
schreiben, da ListView
selbst bereits ein% hat co_de% und dieses Design geht gegen die ganze ScrollView
Idee. Wenn Sie davon überzeugt sind, dass Sie es verwenden müssen, gibt es wahrscheinlich einen besseren Ansatz und Sie müssen Ihren Code irgendwie vereinfachen.
Nun, selbst wenn Sie immer noch so etwas verwenden möchten, können Sie etwas wie folgt verwenden:
%Vor% Sie setzen Ihren Adapter einfach über ListView
und rufen anschließend .setAdapter()
auf. Dies sollte Ihr Fenster entsprechend Ihrer ScrollingListView.setListViewHeightBasedOnChildren(your_listview)
Höhe neu dimensionieren.
---- BEARBEITEN ----
Das wird wahrscheinlich die hässlichste Problemumgehung sein, aber versuchen Sie Folgendes:
%Vor% Wir sollten nie ein ListView
in ein ScrollView
einfügen.
Umgehung: Wenn ScrollView
sich wegen der notifyDataSetChanged()
von listview nach oben / unten bewegt,
Dann versuche es,
%Vor%Machen Sie einfach eine Sache, bevor Sie Elemente in Ihrer Liste hinzufügen
%Vor%Danach kannst du das nochmal machen
wenn nötig, wird es sicher funktionieren
Es ist nicht möglich, eine bildlauffähige Ansicht in einer bildlauffähigen Ansicht zu erstellen. Aber als eine Arbeit um dies und nur für den Fall, dass diese Listviews nicht viel Speicher braucht, wenn alle Ansichten geladen sind. Sie können dies verwenden
%Vor%Es ist wiederum nicht gut, diese Problemumgehung zu verwenden
Fügen Sie den gesamten Inhalt oben als Kopfzeile zur Listenansicht.
Nun, da ich den Code sehe ... kann man nur eine ViewGroup in einem Scrollview haben. Sie würden also die zwei Layouts in ein anderes verzerren, aber ein ListView enthält automatisch eine Bildlaufansicht, so dass es nicht wirklich funktioniert.
Sie müssen also die addHeader-Ansicht in Ihrer ListActivity (des Fragments) verwenden und LinearLayout1 in der Aktivität aus einer anderen XML-Datei aufblasen.
Ich würde die Liste und die anderen Layouts in eine RelativeLayout
statt in eine LinearLayout
Auf diese Weise liegt der obere Rand von ListView
am unteren Rand von LinearLayout
und bleibt immer unter allem anderen.
Sie können die Includes nicht direkt in RelativeLayout
! Weitere Informationen finden Sie hier .
Sie können dies erreichen, indem Sie Folgendes ausführen:
%Vor%Wickeln Sie Ihre Listview außerhalb von scrollview und sonst in scrollview, denn Sie sollten niemals eine ScrollView mit einer ListView verwenden, da ListView sich um das vertikale Scrollen kümmert. Am wichtigsten ist jedoch, dass dadurch alle wichtigen Optimierungen in ListView für den Umgang mit großen Listen vereitelt werden, da ListView dadurch gezwungen ist, seine gesamte Liste von Elementen anzuzeigen, die den von ScrollView bereitgestellten infiniten Container füllen.
Ich hatte das gleiche Problem, das ich gefunden habe, indem ich die Sichtbarkeit der Listenansicht in XML änderte, nachdem ich den Adapter eingestellt hatte. Ich ändere die Sichtbarkeit in sichtbares
%Vor%Obwohl es eine sehr späte Antwort auf diese Frage ist und diese Antwort bereits eine akzeptierte Antwort hat, dachte ich, dass das Putten, wie ich mein Problem gelöst habe, anderen helfen könnte, alles in einem einzigen Thread zu finden.
Also hier ist meine Situation: Ich hatte ein ScrollView
mit einem ListView
am Ende des Layouts. Ich weiß, dass es eine sehr schlechte Übung ist, dies zu tun. Ich könnte das gleiche Verhalten erreichen, das ich wollte, indem ich einen Header an die ListView
angehängt habe. Wie auch immer, mein ListView
hat den Fokus bekommen, als es mit den Daten gefüllt wurde und die Seite wurde automatisch nach unten gescrollt, wo der ListView
gestartet wurde.
Ich habe es mit der akzeptierten Antwort versucht, aber es hat nicht funktioniert. Ich habe versucht, einen Dummy EditText
am oberen Rand des Layouts, so dass es den Fokus automatisch anfordern konnte, aber es hat auch nicht funktioniert. Weil der ListView
den Fokus erhielt, nachdem die Daten von einem REST Api-Aufruf geladen wurden.
Dann fand ich diese Antwort und das hat mir sehr geholfen. Also dachte ich mir, dass ich es hier einfügen sollte, damit andere Hilfe von einem einzigen Thread bekommen, der das gleiche Problem hat wie ich.
mainScrollView.fullScroll(ScrollView.FOCUS_UP);
funktionierte auch nicht für mich, da die Liste ausgefüllt wurde, nachdem die anderen Ansichten ausgefüllt wurden. Also musste ich den ScrollView
nach oben scrollen, nachdem der ListView
aufgefüllt wurde. Also hier ist, wie ich mein Problem gelöst habe.
Ich habe die obigen Antworten versucht, aber keiner von beiden hat funktioniert. Unten ist meine endgültige Lösung. Überschreibe einfach die onFinishInflate -Methode und mache dann einen Post zu scrollTo (0, 0).
%Vor%Tags und Links java android android-layout