Ist es möglich, das ListView
horizontal zu machen ? Ich habe dies mithilfe einer Galerieansicht getan, aber das ausgewählte Element wird automatisch in die Mitte des Bildschirms verschoben. Ich möchte das ausgewählte Element nicht an derselben Stelle haben, auf die ich geklickt habe. Wie kann ich dieses Problem beheben? Meine Idee war es, das ListView
mit einer horizontalen Schriftrolle einzustellen . Teilen Sie Ihre Idee?
android
listview
gallery
horizontal-scrolling
Praveen
quelle
quelle
Antworten:
RecyclerView
Gemäß Android-Dokumentation ist die neue Möglichkeit, die Elemente in der Listenansicht zu organisieren und horizontal anzuzeigenVorteile:
Weitere Informationen zu
RecyclerView
:Stichprobe:
Überleben mit android.com
Fügen Sie einfach den folgenden Block hinzu, um ihn
ListView
von vertikal zu horizontal zu machenCode-Auszug
quelle
Paul macht sich nicht die Mühe, Fehler in seiner Bibliothek zu beheben oder Benutzerkorrekturen zu akzeptieren. Deshalb schlage ich eine andere Bibliothek mit ähnlichen Funktionen vor:
https://github.com/sephiroth74/HorizontalVariableListView
Update : Am 24. Juli 2013 veröffentlichte der Autor (sephiroth74) eine komplett neu geschriebene Version basierend auf dem Code von Android 4.2.2 ListView. Ich muss sagen, dass es nicht alle Fehler hat, die die vorherige Version hatte und großartig funktioniert!
quelle
@ Paul-Antwortlinks zu einer großartigen Lösung, aber der Code erlaubt nicht die Verwendung von onClickListeners für untergeordnete Elemente (die Rückruffunktionen werden niemals aufgerufen). Ich habe eine Weile darum gekämpft, eine Lösung zu finden, und ich habe beschlossen, hier zu posten, was Sie in diesem Code ändern müssen (falls jemand es braucht).
Anstatt
dispatchTouchEvent
Override zu überschreibenonTouchEvent
. Verwenden Sie denselben CodedispatchTouchEvent
und löschen Sie die Methode (den Unterschied zwischen den beiden finden Sie hier http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers ).Fügen Sie dann den folgenden Code hinzu, der entscheidet, das Ereignis von den untergeordneten Elementen zu stehlen und es unseren zu geben
onTouchEvent
, oder lassen Sie es von ihnen behandeln.Vergessen Sie nicht, die Variablen in Ihrer Klasse zu deklarieren:
quelle
Seit Google die Android Support Library v7 21.0.0 eingeführt hat, können Sie mit RecyclerView Elemente horizontal scrollen. Das RecyclerView-Widget ist eine erweiterte und flexiblere Version von ListView.
Um RecyclerView zu verwenden, fügen Sie einfach die Abhängigkeit hinzu:
Hier ist ein Beispiel:
Weitere Informationen zu RecyclerView:
quelle
Dies ist etwas (sehr) spät, aber ich poste dies, falls jemand später dazu kommt.
Die Support-Bibliothek ab der Android L-Vorschau
RecyclerView
bietet genau das, was Sie wollen.Gerade jetzt, können Sie es nur durch die L Vorschau SDK erhalten und Sie müssen Ihre einstellen
minSdk
zuL
. Sie können jedoch alle erforderlichen Dateien in Ihr Projekt kopieren und auf diese Weise verwenden, bis L offiziell veröffentlicht ist.Sie können die Vorschaudokumente hier herunterladen .
Warnung: Die API für Recycler View kann sich ändern und es können Fehler auftreten.
Aktualisiert
Der Quellcode für die horizontale Listenansicht lautet:
quelle
LinearLayoutManager
- siehe hier: stackoverflow.com/questions/28460300/…Laden Sie die JAR-Datei hier herunter
Legen Sie es nun in Ihrem libs-Ordner ab, klicken Sie mit der rechten Maustaste darauf und wählen Sie "Als Bibliothek hinzufügen".
Jetzt in main.xml diesen Code einfügen
Wenn Sie jetzt in der Aktivitätsklasse eine horizontale Listenansicht mit Bildern wünschen, geben Sie diesen Code ein
quelle
Es ist eigentlich sehr einfach : Drehen Sie einfach die Listenansicht, um sich auf die Seite zu legen
mlistView.setRotation(-90);
Nach dem Aufblasen der Kinder sollte sich diese in der getView-Methode befinden. Sie drehen die Kinder, um aufrecht zu stehen:
Bearbeiten: Wenn Ihre ListView nach dem Drehen nicht richtig passt, platzieren Sie die ListView wie folgt in diesem RotateLayout :
quelle
Meine Lösung besteht darin, einfach ein
ViewPager
Widget zu verwenden. Es ist nicht zentriert wieGallery
und verfügt über integrierte Funktionen zum Recycling von Ansichten (alsListView
). Möglicherweise sehen Sie in der Google Play-App einen ähnlichen Ansatz, wenn Sie mit horizontal scrollbaren Listen arbeiten.Sie müssen dort nur
PagerAdapter
ein paar Optimierungen vornehmen:Als Ergebnis haben Sie ein horizontal scrollbares Widget mit Adapter wie folgt:
quelle
Hinweis: Android unterstützt jetzt horizontale Listenansichten mit RecyclerView. Daher ist diese Antwort für Informationen zu RecyclerView veraltet: https://developer.android.com/reference/android/support/v7/widget/RecyclerView
Ich habe eine Logik entwickelt, um dies ohne Verwendung einer externen Bibliothek für horizontale Bildlaufansichten zu tun. Hier ist die horizontale Ansicht, die ich erzielt habe, und ich habe meine Antwort hier veröffentlicht: https://stackoverflow.com/a/33301582/5479863
Meine json Antwort lautet:
Layoutdatei:
Klassendatei:
Trick, der hier funktioniert, ist die ID, die ich ImageView "imgView.setId (v)" zugewiesen habe, und nachdem ich onClickListener darauf angewendet habe, rufe ich wieder die ID der Ansicht ab .... Ich habe dies auch im Code kommentiert dass es leicht zu verstehen ist, hoffe ich, dass dies sehr nützlich sein kann ... Happy Coding ... :)
quelle
getPixelsToDP()
?Dies ist keine gute Antwort, aber wie wäre es mit einer horizontalen Bildlaufansicht ?
quelle
Sie können RecyclerView in der Support-Bibliothek verwenden. RecyclerView ist eine verallgemeinerte Version von ListView, die Folgendes unterstützt:
Android Recycler Anzeigen von Dokumenten
quelle
Ich habe viel nach einer Lösung für dieses Problem gesucht. Die kurze Antwort lautet: Es gibt keine gute Lösung, ohne die privaten Methoden und dergleichen außer Kraft zu setzen. Das Beste, was ich gefunden habe, war, es durch Erweiterung von Grund auf selbst zu implementieren
AdapterView
. Es ist ziemlich elend. Siehe meine SO-Frage zu horizontalen ListViews .quelle
fillListDown()
Methode den unteren Rand des letzten Listenelements verfolgen müssen. Sie wissen jedoch erst, wo sich diese Kante befindet, wenn Sie das letzte Element (adapter.getCount () - 1) erstellen. Sie warten also, bis das Element erstellt wurde, und können dann die Position der Kante speichern. Sobald Sie das wissen, können Sie sicherstellen, dass mListTop niemals kleiner als 0 und niemals größer als die Höhe der Liste ist.Ich musste dasselbe für eines meiner Projekte tun und schrieb schließlich auch mein eigenes. Ich nannte es HorzListView ist jetzt Teil meiner Open-Source- Aniqroid- Bibliothek.
http://aniqroid.sileria.com/doc/api/ (Suchen Sie unten nach Downloads oder verwenden Sie das Google Code-Projekt, um weitere Download-Optionen anzuzeigen : http://code.google.com/p/aniqroid/downloads/list )
Die Klassendokumentation finden Sie hier: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html
quelle
Für meine Anwendung verwende ich eine HorizontalScrollView, die LinearLayout enthält und deren Ausrichtung auf horizontal eingestellt ist. Um Bilder hinzuzufügen, erstelle ich ImageViews innerhalb der Aktivität und füge sie meinem LinearLayout hinzu. Beispielsweise:
Und das funktioniert perfekt für mich. In der Aktivität muss ich nur so etwas wie den folgenden Code tun:
Wie gesagt, das funktioniert bei mir und ich hoffe, es hilft jemandem, der dies auch erreichen möchte.
quelle
Nun, Sie können Ihre Textansichten usw. immer dynamisch erstellen und Ihre Onclicklistener so einstellen, wie Sie es mit einem Adapter tun würden
quelle
HorizontialListView kann nicht funktionieren, wenn die Daten im Adapter in einem anderen Thread enthalten sind. Alles läuft zu 100% auf dem UI-Thread. Dies ist ein großes Problem bei Multithread. Ich denke, die Verwendung von HorizontialListView ist nicht die beste Lösung für Ihr Problem. HorzListView ist ein besserer Weg. Sie ersetzen einfach Ihre vorherige Galerie durch HorzListView. Sie müssen den Code für den Adapter nicht ändern. Dann läuft alles so, wie Sie es sich erhoffen. Siehe https: // stackoverflow.com/a/12339708/1525777 über HorzListView.
quelle
Ich hatte in meinem Projekt einen horizontalen Listenansichtslink verwendet und gute Ergebnisse erzielt. Ich hatte anfangs die Devsmart- Bibliothek benutzt, aber es gab mir einige Probleme. Der beste Weg, um den horizontalen Listenansichtslink zu verwenden, da er meine Probleme behoben hat. Außerdem habe ich kürzlich meine App im Google PlayStore mit dieser Bibliothek gestartet und von den Nutzern eine nette Antwort erhalten. Ich empfehle Ihnen daher, dieselbe Bibliothek zu verwenden, die ich oben erwähnt habe, um die Listenansicht horizontal anzuzeigen. Genießen :)
quelle
Dafür gibt es eine großartige Bibliothek namens TwoWayView , die sehr einfach zu implementieren ist. Fügen Sie einfach die Projektbibliothek in Ihren Arbeitsbereich ein und fügen Sie sie als Bibliotheksprojekt zu Ihrem ursprünglichen Projekt hinzu . Führen Sie dann die folgenden Schritte aus, die ursprünglich hier erwähnt wurden :
Dann,
und zum Schluss deklarieren Sie es einfach und behandeln Sie es wie jeden normalen
ListView
:Alle Methoden
ListView
werden hier wie gewohnt arbeiten, aber es gibt nur einen Unterschied , den ich bemerkt, das ist , wenn die Wahl - Modus einstellen, wobei das VerfahrensetChoiceMode
kein nimmtint
Wert , sondern einen Wert ausenum
aufgerufenChoiceMode
, solist_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
wirdlvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE
.quelle
Sie können ViewFlipper verwenden, um das Layout-XML einzuschließen und Bilder hinzuzufügen, Listenansicht für jedes Layout-XML
quelle