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ämlichParseQueryAdapter
);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.
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
"Es gibt keine Möglichkeit, verschachteltes Scrollen auf ListView zu erhalten". Es gibt ViewCompat.setNestedScrollingEnabled (ListView, boolean); – Dogcat
@Dogcat - was nichts vor API 21 tut. Es erspart Ihnen nur die Überprüfung der API-Ebene. – ianhanniballake