Apakah mungkin membuat ListView
secara horizontal? Saya telah melakukan ini menggunakan tampilan galeri, tetapi item yang dipilih datang ke tengah layar secara otomatis. Saya tidak ingin item yang dipilih di tempat yang sama saya klik. Bagaimana saya bisa memperbaiki masalah ini? Ide saya adalah mengatur ListView
dengan scroll horizontal. Bagikan ide Anda?
android
listview
gallery
horizontal-scrolling
Praveen
sumber
sumber
Jawaban:
Sesuai Android Dokumentasi
RecyclerView
adalah cara baru untuk mengatur item dalam listview dan ditampilkan secara horizontalKeuntungan:
Informasi Lebih Lanjut tentang
RecyclerView
:Sampel:
survivingwithandroid.com
Cukup tambahkan blok di bawah ini untuk membuat
ListView
horizontal dari vertikalCuplikan kode
sumber
Paul tidak repot-repot memperbaiki bug perpustakaannya atau menerima perbaikan pengguna. Itu sebabnya saya menyarankan perpustakaan lain yang memiliki fungsi serupa:
https://github.com/sephiroth74/HorizontalVariableListView
Pembaruan : pada 24 Juli 2013 penulis (sephiroth74) merilis versi yang sepenuhnya ditulis ulang berdasarkan kode android 4.2.2 ListView. Saya harus mengatakan bahwa itu tidak memiliki semua kesalahan yang dimiliki versi sebelumnya dan berfungsi dengan baik!
sumber
@ Paul jawab tautan ke solusi hebat, tetapi kode tidak mengizinkan untuk menggunakan onClickListeners pada item anak-anak (fungsi panggilan balik tidak pernah dipanggil). Saya telah berjuang selama beberapa saat untuk menemukan solusi dan saya telah memutuskan untuk memposting di sini apa yang perlu Anda modifikasi dalam kode itu (jika seseorang membutuhkannya).
Alih-alih menimpa
dispatchTouchEvent
menimpaonTouchEvent
. Gunakan kode yang samadispatchTouchEvent
dan hapus metode (Anda dapat membaca perbedaan antara keduanya di sini http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers )Kemudian, tambahkan kode berikut yang akan memutuskan untuk mencuri acara dari item anak-anak dan memberikannya kepada kami
onTouchEvent
, atau membiarkannya ditangani oleh mereka.Terakhir, jangan lupa mendeklarasikan variabel di kelas Anda:
sumber
Karena Google memperkenalkan Android Support Library v7 21.0.0, Anda dapat menggunakan RecyclerView untuk menggulir item secara horizontal. Widget RecyclerView adalah versi ListView yang lebih canggih dan fleksibel.
Untuk menggunakan RecyclerView, tambahkan saja ketergantungan:
Berikut ini contohnya:
Info lebih lanjut tentang RecyclerView:
sumber
Ini sedikit (sangat) terlambat, tapi saya memposting ini kalau-kalau ada yang datang nanti.
Pustaka Dukungan pada pratinjau L Android memiliki
RecyclerView
yang tidak persis apa yang Anda inginkan.Sekarang, Anda hanya bisa mendapatkannya melalui SDK L pratinjau dan Anda perlu mengatur Anda
minSdk
untukL
. Tetapi Anda dapat menyalin semua file yang diperlukan ke proyek Anda dan menggunakannya seperti itu sampai L secara resmi keluar.Anda dapat mengunduh dokumen pratinjau di sini .
Peringatan: API untuk Tampilan Pendaur Ulang dapat berubah dan mungkin memiliki bug.
Diperbarui
Kode sumber untuk tampilan daftar horizontal adalah:
sumber
LinearLayoutManager
- lihat di sini: stackoverflow.com/questions/28460300/…Unduh file jar dari sini
sekarang masukkan ke folder libs Anda, klik kanan dan pilih 'Tambahkan sebagai perpustakaan'
sekarang di main.xml cantumkan kode ini
sekarang di kelas Activity jika Anda ingin Horizontal Listview dengan gambar kemudian masukkan kode ini
sumber
Ini sebenarnya sangat sederhana : Cukup Putar tampilan daftar untuk berbaring miring
mlistView.setRotation(-90);
Kemudian setelah menggembungkan anak-anak, itu harus di dalam metode getView. Anda memutar anak-anak untuk berdiri tegak:
Sunting: jika ListView Anda tidak pas dengan rotasi, letakkan ListView di dalam RotateLayout ini seperti ini:
sumber
Solusi saya adalah cukup menggunakan
ViewPager
widget. Ini tidak terkunci di pusat karenaGallery
dan memiliki fitur bawaan untuk mendaur ulang tampilan (sebagaiListView
). Anda mungkin melihat pendekatan serupa di aplikasi Google Play, setiap kali Anda berurusan dengan daftar yang dapat digulir secara horizontal.Anda hanya perlu memperpanjang
PagerAdapter
dan melakukan beberapa penyesuaian di sana:Akibatnya, Anda akan memiliki widget yang dapat digulir secara horizontal dengan adaptor, seperti ini:
sumber
Catatan: Android sekarang mendukung tampilan daftar horizontal menggunakan RecyclerView, jadi sekarang jawaban ini sudah usang, untuk informasi tentang RecyclerView: https://developer.android.com/reference/android/support/v7/widget/RecyclerView
Saya telah mengembangkan logika untuk melakukannya tanpa menggunakan pustaka scrollview horizontal eksternal, berikut adalah tampilan horizontal yang saya capai dan saya telah memposting jawaban saya di sini: https://stackoverflow.com/a/33301582/5479863
Respons json saya adalah ini:
File tata letak:
file kelas:
Trik yang berfungsi di sini adalah id yang telah saya tetapkan untuk ImageView "imgView.setId (v)" dan setelah itu menerapkan onClickListener untuk itu saya kembali mengambil id tampilan .... Saya juga berkomentar di dalam kode sehingga yang mudah dimengerti, saya harap ini mungkin sangat berguna ... Selamat Coding ... :)
sumber
getPixelsToDP()
?Ini bukan jawaban yang bagus, tetapi bagaimana dengan menggunakan Tampilan Gulir Horisontal ?
sumber
Anda dapat menggunakan RecyclerView di perpustakaan dukungan. RecyclerView adalah versi umum ListView yang mendukung:
Android Recycler Lihat Documents
sumber
Saya telah melakukan banyak pencarian solusi untuk masalah ini. Jawaban singkatnya adalah, tidak ada solusi yang baik, tanpa mengesampingkan metode pribadi dan hal semacam itu. Hal terbaik yang saya temukan adalah menerapkannya sendiri dari awal dengan memperluas
AdapterView
. Ini sangat menyedihkan. Lihat pertanyaan SO saya tentang ListViews horisontal .sumber
fillListDown()
metode ini, Anda perlu melacak tepi bawah item daftar terakhir. Tapi Anda tidak tahu di mana ujung itu sampai Anda benar-benar membuat item terakhir (adapter.getCount () - 1). Jadi Anda menunggu sampai item itu dibuat dan kemudian Anda dapat menyimpan lokasi tepi. Setelah Anda tahu itu, Anda dapat memastikan bahwa mListTop tidak pernah kurang dari 0 dan tidak pernah lebih dari ketinggian daftar.Saya harus melakukan hal yang sama untuk salah satu proyek saya dan akhirnya saya menulis sendiri juga. Saya menyebutnya HorzListView sekarang bagian dari perpustakaan open source Aniqroid saya .
http://aniqroid.sileria.com/doc/api/ (Cari unduhan di bagian bawah atau gunakan proyek kode google untuk melihat lebih banyak opsi unduhan: http://code.google.com/p/aniqroid/downloads/list )
Dokumentasi kelas ada di sini: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html
sumber
Untuk aplikasi saya, saya menggunakan HorizontalScrollView yang berisi LinearLayout di dalamnya, yang orientasinya diatur ke horizontal. Untuk menambahkan gambar di dalamnya, saya membuat ImageViews di dalam aktivitas dan menambahkannya ke LinearLayout saya. Sebagai contoh:
Ini berfungsi dengan baik bagiku. Dalam aktivitas yang harus saya lakukan adalah sesuatu seperti kode di bawah ini:
Seperti yang saya katakan itu bekerja untuk saya, dan saya harap ini membantu seseorang yang ingin mencapai ini juga.
sumber
baik Anda selalu dapat membuat tampilan teks Anda dll secara dinamis dan mengatur onclicklisteners Anda seperti yang akan Anda lakukan dengan adaptor
sumber
HorizontialListView tidak dapat berfungsi saat data dalam adaptor terlibat di utas lainnya. Semuanya berjalan 100% pada utas UI. Ini adalah masalah besar di multithread. Saya pikir menggunakan HorizontialListView bukan solusi terbaik untuk masalah Anda. HolzListView adalah cara yang lebih baik. Anda hanya perlu mengganti Galeri sebelumnya dengan HorzListView. Anda tidak perlu mengubah kode tentang adaptor. Kemudian semuanya berjalan sesuai harapan Anda. Lihat https: // stackoverflow.com/a/12339708/1525777 tentang HorzListView.
sumber
Saya telah menggunakan tautan listview horizontal dalam proyek saya & saya mendapat hasil yang baik. Saya telah menggunakan perpustakaan devsmart pada awalnya tetapi itu memberi saya beberapa masalah. Jadi cara terbaik untuk menggunakan tautan listview horizontal karena memulihkan masalah saya & saya juga baru-baru ini meluncurkan aplikasi saya di Google PlayStore menggunakan perpustakaan ini & mendapat tanggapan baik dari pengguna. Jadi saya sarankan Anda untuk menggunakan perpustakaan yang sama yang saya sebutkan di atas untuk menampilkan tampilan daftar secara horizontal. Nikmati :)
sumber
Ada perpustakaan yang hebat untuk itu, yang disebut TwoWayView , sangat mudah diimplementasikan, cukup sertakan perpustakaan proyek ke dalam ruang kerja Anda dan tambahkan sebagai proyek perpustakaan ke proyek asli Anda, dan kemudian ikuti langkah-langkah berikut yang awalnya disebutkan di sini :
Kemudian,
dan akhirnya, cukup deklarasikan dan tangani seperti biasa
ListView
:Semua metode
ListView
akan bekerja di sini seperti biasa, tetapi hanya ada satu perbedaan yang saya perhatikan, yaitu ketika mengatur mode pilihan, metodesetChoiceMode
tidak mengambilint
nilai tetapi nilai dari yangenum
dipanggilChoiceMode
, demikianlist_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
juga halnyalvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE
.sumber
Anda dapat menggunakan ViewFlipper untuk memasukkan tata letak XML dan menambahkan gambar, tampilan daftar untuk setiap tata letak XML
sumber