Übergeben Sie ein Bewegungsereignis an die übergeordnete Ansicht, wenn die Ansicht oben / unten angezeigt wird

8

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?

    
Gooey 17.09.2015, 13:28
quelle

3 Antworten

8

Sie können eine benutzerdefinierte ScrollView und ListView erstellen und überschreiben

%Vor%

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

stehen

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.

%Vor%

Die Methode listIsAtTop in ListView sieht folgendermaßen aus:

%Vor%     
GeorgeP 28.09.2015, 20:46
quelle
4

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.

    
Kishan Vaghela 28.09.2015 05:47
quelle
0

Versuchen Sie Folgendes:

  1. Finden Sie zuerst, ob Sie scrollview Bottom erreicht haben. Registrieren Sie onScrollChanged in Ihrer Bildlaufansicht

    %Vor%
  2. Ü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.

    
Hradesh Kumar 22.09.2015 15:59
quelle