Ich habe ein ListView
in einem ScrollView
, um Kommentare anzuzeigen, und ich möchte Folgendes tun:
Wenn der Benutzer nach unten wischt, sollte zuerst ScrollView
vollständig nach unten scrollen, da sich die Liste unten befindet. Sobald es vollständig heruntergefahren ist, sollte Listiew
mit dem Scrollen beginnen.
Ähnlich, wenn der Benutzer nach oben scrollt, sollte zuerst ListView
(Reihenfolge hier umgekehrt!) nach oben scrollen, bevor ScrollView
mit dem Scrollen beginnt.
Bisher habe ich Folgendes getan:
%Vor% Die Logs werden im richtigen Moment ausgelöst, aber die ScrollView
wird sich nicht bewegen, obwohl ich false zurückgebe.
Ich habe auch versucht, v.getParent().requestDisallowInterceptTouchEvent(false);
zu den Anweisungen hinzuzufügen, aber das hat auch nicht funktioniert.
Wie kann ich es zum Laufen bringen?
Sie können eine benutzerdefinierte ScrollView
und ListView
erstellen und überschreiben
so:
%Vor% Auf diese Weise wird jede Berührung von "Unten" von ListView
, während Sie sich am unteren Rand von " ScrollView
" befinden, auf " ListView
" gesetzt.
Dies ist nur eine Skizzenimplementierung, aber ich denke, Sie könnten damit anfangen, indem Sie dasselbe tun, um zu erkennen, wenn Sie ganz oben im ListView
Als Hinweis würde ich versuchen, eine einfachere Implementierung zu verwenden, indem Sie nur einen ListView
mit dem aktuellen Inhalt von ScrollView
als Header von ListView verwenden, indem Sie listView.addHeaderView(scrollViewContent)
verwenden. Ich weiß nicht, ob das Ihren Bedürfnissen entspricht.
BEARBEITEN:
Erkennen, wann mit dem Scrollen des ScrollView
begonnen werden soll. Eine Referenz von ListView
in ScrollView
beibehalten. Wenn der Benutzer hochscrollt und das ListView
oben ist, wird das Ereignis von ScrollView
verbraucht.
Die Methode listIsAtTop in ListView sieht folgendermaßen aus:
%Vor%Sie sollten ListView nicht in ScrollView einfügen, aber Sie können Ihre Anforderung mithilfe von ExpandableHeightListView erreichen. Dies macht ListView in voller Höhe innerhalb von ScrollView. Es muss kein TouchListener hinzugefügt werden.
%Vor%Und eine andere Möglichkeit, Ihre Anforderung zu erfüllen, ist RecyclerView mit Header.
Versuchen Sie Folgendes:
Finden Sie zuerst, ob Sie scrollview Bottom erreicht haben. Registrieren Sie onScrollChanged in Ihrer Bildlaufansicht
%Vor%Überprüfen Sie, ob Sie an der Spitze von ListView erreichen. Überprüfen Sie, ob firstVisibleItem 0 ist: -
%Vor%Ich hoffe, das funktioniert für Sie. Wenn Sie Probleme haben, lassen Sie es mich wissen.
Tags und Links android scrollview listview motionevent