Wie erstelle ich ein Listview, die nicht in einem Scrollview ist, oder hat die Scrollview deaktiviert?
-
19-09-2019 - |
Frage
Ich möchte einige der Leckereien in einem Listview, wie ein ListAdapter verwenden zu können, und Artikelauswahl, usw., aber ich will nicht den Scroll Teil davon. Ich möchte, dass mich trennen implementieren, in einer anderen Art und Weise (wie oder warum ich dies nicht wirklich der Sinn dieser Frage ist, also bitte nicht fragen, „warum“).
Gibt es eine Möglichkeit, eine Listview zu haben, die nicht in einem Scrollview ist oder hat das Scrollen deaktiviert?
Lösung
Ein ListView
ist nicht in einem ScrollView
. Ein ListView
nicht Scrollen eigen. Ich glaube nicht, dass Sie über eine einfache API Scrollen deaktivieren. Wenn ja, ist entweder Ihre Wahl ListView
Unterklasse und versucht, Wege zu finden, Verhalten außer Kraft zu setzen Scrollen, Klon ListView
und zu beseitigen Verhaltensweisen Scrollen oder eigenen AdapterView
zu schreiben, die Dinge auf die Art und Weise machen Sie wollen.
Andere Tipps
Eine andere Möglichkeit, dies zu tun ist, um die ListView
in wickeln, was auch immer benutzerdefinierte Scrollen Lösung, die Sie oben gekocht haben. Wenn Sie einfach nur die Höhe des ListView
gesetzt genau wie alle Zeilen so hoch zu sein (unter Verwendung der LayoutParams
der Listenansicht), dann wird es wie eine normale Ansicht handeln und blättern nicht in der Lage sein; daher können Sie es auf einem anderen Scroll-Ansicht. Die Schwierigkeit bei dieser Methode ist, dass Sie die Höhe Ihrer Liste im voraus wissen haben, so haben Sie die Höhe jeder Zeile kennen. Auch dies wird erstellen, um alle Zeilen auf einmal und so werden Sie nicht in der Lage sein, die Vorteile der Blick-Recycling-Funktion zu übernehmen.
Wenn Sie nicht eine einfache Möglichkeit haben, die Höhe der Zeit voraus zu berechnen, können Sie die ListView
tricksen es für Sie tun, indem onMeasure
überschrieben und es Ihre eigene Höhe spec geben:
// Calculate height of the entire list by providing a very large
// height hint. But do not use the highest 2 bits of this integer;
// those are reserved for the MeasureSpec mode.
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);