ListView in der Scroll-Ansicht Meine Scrollansicht wird an den Anfang der Listenansicht verschoben. Wie verhindere ich das?

7

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

    
arberb 21.02.2012, 22:58
quelle

13 Antworten

8

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%     
nKn 10.02.2014, 17:39
quelle
9

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%     
quelle
3
  

Machen Sie einfach eine Sache, bevor Sie Elemente in Ihrer Liste hinzufügen

%Vor%
  

Danach kannst du das nochmal machen

%Vor%
  

wenn nötig, wird es sicher funktionieren

    
Bharat singh 23.09.2016 10:38
quelle
2

hinzufügen:

%Vor%

in der Liste, in der Sie nicht blättern möchten

Von Android Docs

    
headdetect 21.02.2012 23:26
quelle
2

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

    
Ahmed Hafez 15.02.2014 21:37
quelle
2

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.

    
Manfred Moser 21.02.2012 23:00
quelle
1

Ich würde die Liste und die anderen Layouts in eine RelativeLayout statt in eine LinearLayout

umbrechen %Vor%

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 .

    
Ayoub 12.02.2014 13:01
quelle
1

Ich habe 2 oder 3 Änderungen in Ihrer XML-Datei vorgenommen

%Vor%

Eine weitere Sache, die Sie brauchen, ist den gegebenen Code in Ihre Java-Datei schreiben.

%Vor%

Ich hoffe, das hilft dir.

    
A.R. 16.02.2014 16:30
quelle
1

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.

Source Android Docs

    
Navdeep Singh 17.02.2014 04:38
quelle
0

Die einzige Lösung, die für mich funktionierte, war ein EditText als erstes untergeordnetes Element des Layouts hinzuzufügen. Hässlich, ich weiß.

%Vor%     
Aerim 01.09.2015 18:57
quelle
0

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%     
Fahad Rehman 19.12.2015 14:46
quelle
0

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.

%Vor%     
Reaz Murshed 27.03.2016 11:00
quelle
0

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%     
ghui zhang 14.03.2017 00:22
quelle

Tags und Links