7

Titel ist klar. Ich habe dieses Layout:ListView verschachtelt Scrollen auf API <21

_________________ 
|_______________| <- Toolbar  
|___|___|___|___| <- Tablayout 
|    | 
|    | 
| ViewPager | 
|    | 
|_______________| 

Beide Symbolleiste und tablayout innerhalb eines AppBarLayout sind, so kann ich Scroll Flags verwenden, um die Symbolleiste auszublenden auf nach oben hin zu scrollen. Das Problem besteht darin, dass dies nur mit Nested-Scrolling-unterstützten Ansichten funktioniert. Die meisten Tabs - ich meine, die meisten Seiten - sind support.v4.NestedScrollView s, also ist das OK; andere sind (und müssen sein) ListView s.

Ab Lollipop kann ich einfach android:nestedScrollingEnabled="true" zur Listenansicht hinzufügen, und die Symbolleiste wird beim Scrollen korrekt angezeigt.

Auf API < 21 gibt es jedoch kein solches Attribut, und die Symbolleiste wird nicht ausgeblendet. Noch wichtiger ist, dass die allerletzten Einträge in der Liste ausgeblendet sind, wegen eines Messfehlers in CoordinatorLayout: ListView verhält sich so, als hätte es den Raum, der momentan von der Werkzeugleiste belegt ist.

Lösungen:

  • Switch to RecyclerView, die verschachtelten Scrollen jedoch zwingend nötig: Das kann ich nicht, weil ich brauche eine externe Bibliothek Adapter, der nur mit Adapter Ansichten arbeitet verwenden und das kann ich nicht ersetzen (nämlich ParseQueryAdapter);

  • Erweitern Sie ListView und implementieren Sie verschachtelte Scrolling: scheint viel zu kompliziert;

  • Erweitern Sie ListView und implementieren Sie einige Workarounds, wie die Messung von Dingen, um das Problem der letzten Elemente zu vermeiden oder (und) ein benutzerdefiniertes Verhalten, um die Symbolleiste zu verbergen: scheint auch kompliziert;

  • Verwenden Sie einige Layout-Trick: gefunden keine.

Irgendwelche Hilfe?

Zum Beispiel habe ich (verzweifelt) versucht:

<android.support.v4.widget.NestedScrollView 
    android:nestedScrollingEnabled="true" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
    </ListView> 

</android.support.v4.widget.NestedScrollView> 

Aber auf diese Weise die ListView nicht als match_parent angelegt. Ich bekomme eine kleine Ansicht mit kleiner Höhe und der Rest der Seite ist leer.

Antwort

2

Leider gibt es keine Möglichkeit, verschachtelte Scrollen zu bekommen arbeiten ListView - sonst wäre es nicht die Änderungen erfordern, die in API 21.

Sie werden bemerken, fertig waren, dass die aktuelle Parse SDKParseQueryAdapter tatsächlich entfernt wurde vollständig . In Anbetracht dessen kann es sinnvoll sein, einen eigenen RecyclerView-basierten Adapter mit der Parse query APIs directly zu erstellen.

+0

Ich bin nicht auf der allerletzten Version, aber ich erinnere mich, dass Klasse nicht in den öffentlichen APIs für lange aufgeführt ist. Vielen Dank für das "Sie können nicht" - Ich verbrachte einige Stunden mit NestedScrolling-Schnittstellen. – natario

+0

"Es gibt keine Möglichkeit, verschachteltes Scrollen auf ListView zu erhalten". Es gibt ViewCompat.setNestedScrollingEnabled (ListView, boolean); – Dogcat

+1

@Dogcat - was nichts vor API 21 tut. Es erspart Ihnen nur die Überprüfung der API-Ebene. – ianhanniballake