Saya memiliki tata letak android yang memiliki scrollView
sejumlah elemen di dalamnya. Di bagian bawah scrollView
saya punya listView
yang kemudian diisi oleh adaptor.
Masalah yang saya alami, adalah android tidak termasuk listView
dari scrollView
yang scrollView
sudah memiliki fungsi scroll-mampu. Saya ingin listView
menjadi selama konten dan untuk tampilan master gulir agar dapat gulir.
Bagaimana saya bisa mencapai perilaku ini?
Inilah tata letak utama saya:
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:fillViewport="true"
android:gravity="top" >
<LinearLayout
android:id="@+id/foodItemActvity_linearLayout_fragments"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
Saya kemudian pemrograman menambahkan komponen saya ke linearlayour dengan id: foodItemActvity_linearLayout_fragments
. Di bawah ini adalah salah satu tampilan yang dimuat ke linearlayout itu. Ini yang memberiku masalah dengan gulungan.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/fragment_dds_review_textView_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reviews:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ListView
android:id="@+id/fragment_dds_review_listView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
Adaptor saya kemudian mengisi tampilan daftar ini.
Berikut adalah gambar dari penampil hierarki android ketika saya mengklik master scrollView:
Seperti yang Anda lihat, tidak termasuk listView ulasan.
Saya harus dapat menggulir halaman ke bawah dan melihat 8 ulasan, tetapi sebaliknya itu hanya menunjukkan kepada saya 3, dan saya dapat menggulir pada bagian kecil di mana ulasan berada. Saya ingin gulir halaman global
sumber
Jawaban:
Solusi terpendek & termudah untuk ChildView untuk menggulir di dalam ScrollView . Apa pun seperti ListView, RecyclerView, dll. Anda tidak perlu melakukan sesuatu yang istimewa dalam kode.
Cukup ganti ScrollView dengan android.support.v4.widget.NestedScrollView di xml Anda saat ini dan kemudian keajaiban terjadi.
Di bawah ini adalah contoh kode xml:
Sekarang Anda dapat menyingkirkan semua peretasan jelek yang kami lakukan untuk mengatasi pengguliran bersarang ini.
Saatnya bermain. Ya ampun, ya ampun.
sumber
requestLayout()
- metode setLayoutParams sudah melakukannya.view.measure(MeasureSpec.makeMeasureSpec(desiredWidth, MeasureSpec.AT_MOST),MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
Jawabannya sederhana dan saya terkejut belum dijawab di sini.
Gunakan a
Header View
atau / danFooter View
pada daftar itu sendiri. Jangan mencampurScrollView
denganListView
atau apa pun yang dapat menggulir. Ini dimaksudkan untuk digunakan dengan header dan footer :)Pada dasarnya, ambil semua konten di atas ListView Anda, letakkan di file .xml lain sebagai tata letak dan kemudian dalam kode kembangkan dan tambahkan ke daftar sebagai tampilan header.
yaitu
sumber
Saya tahu sudah begitu lama tetapi saya juga mengalami masalah ini, mencoba solusi ini dan berhasil. Jadi saya kira itu dapat membantu yang lain juga.
Saya menambahkan android: fillViewport = "true" pada layout xml untuk scrollView. Jadi secara keseluruhan ScrollView saya akan seperti ini.
Dan itu bekerja bagaikan sulap bagiku. ListView yang terletak di dalam ScrollView saya memperluas ke ukurannya lagi.
Berikut adalah contoh kode lengkap untuk ScrollView dan ListView.
sumber
Anda Membuat Custom ListView yang bukan dapat digulir
Di File Sumber Daya Tata Letak Anda
Dalam Java File, Buat objek customListview Anda, bukan ListView seperti: NonScrollListView non_scroll_list = (NonScrollListView) findViewById (R.id.lv_nonscroll_list);
sumber
Anda dapat menggunakan kode ini untuk tampilan daftar di tampilan layar gulir
sumber
ListView
di dalamRecyclerView
untuk menampilkan lebih dari 1 elemen.Anda dapat menyelesaikannya dengan menambahkan
android:fillViewport="true"
ke ScrollView Anda.sebelum menggunakan properti itu, hanya ada satu anak dari tampilan daftar saya yang terlihat. setelah menggunakan itu semua baris atau anak daftar terlihat.
sumber
Jangan lakukan apa pun di Parent ScrollView. Hanya lakukan ini pada ListView anak. Semuanya akan bekerja dengan sempurna.
sumber
Kode ini akan menyelesaikan masalah Anda jika Anda hanya menerapkan ListView dalam kode.
Jika Anda menggunakan RelativeLayout sebagai anak ListView daripada kode ini, kembalikan NullPointerException di sini listItem.measure (0, 0); , karena RelativeLayout. Dan solusinya adalah meletakkan Relativelayout Anda di dalam LinearLayout dan itu akan berfungsi dengan baik.
sumber
Saya akan meninggalkannya di sini kalau-kalau ada yang akan menghadapi masalah yang sama. Saya harus meletakkan ListView di dalam ScrollView. ListView dengan header bukan opsi karena sejumlah alasan. Tidak ada pilihan untuk menggunakan LinearLayout, bukan ListView. Jadi saya mengikuti solusi yang diterima, tetapi tidak berhasil karena item dalam daftar memiliki tata letak yang kompleks dengan beberapa baris dan setiap item tampilan daftar memiliki ketinggian variabel. Ketinggian diukur tidak dengan benar. Solusinya adalah mengukur setiap item di dalam metode getView () ListView Adapter.
sumber
Anda dapat dengan mudah memasukkan ListView di ScrollView! Hanya perlu mengubah ketinggian ListView secara pemrograman , seperti ini:
Ini bekerja dengan sempurna!
sumber
Dilakukan setelah banyak R&D:
fragment_one.xml akan terlihat seperti:
Kelas Java Anda dari FragmentOne.java terlihat seperti:
onCreateView
sumber
Saya memiliki masalah yang mirip dengan masalah yang ditimbulkan oleh Poster Asli - bagaimana membuat scroll listview di dalam scrollview - dan jawaban ini memecahkan masalah saya. Nonaktifkan pengguliran ListView yang ada di dalam ScrollView
Saya tidak menyebut fragmen baru ke layout yang ada atau semacamnya, seperti yang dilakukan OP, jadi kode saya akan terlihat seperti ini:
Pada dasarnya apa yang saya lakukan adalah memeriksa panjang tampilan daftar sebelum saya menyebutnya dan ketika saya menyebutnya saya membuatnya menjadi panjang itu. Di kelas java Anda gunakan fungsi ini:
Dan panggil fungsi seperti ini:
Hasilnya adalah tampilan daftar tanpa bilah gulir, seluruh panjang tampilan daftar yang ditampilkan, yang menggulir dengan bilah gulir tampilan scroll.
sumber
Seperti yang telah disebutkan orang lain, jangan gunakan ListView di dalam ScrollView.
Untuk mengatasinya, Anda dapat menggunakan LinearLayout, tetapi untuk menjaga semuanya tetap rapi - isi LinearLayout Anda dengan Adaptor, sama seperti yang Anda lakukan dengan ListView
Anda dapat menggunakan kelas ini sebagai pengganti LinearLayout yang mendukung Adaptor
sumber
Anda bisa meletakkan semuanya ke tata letak linier. Yaitu, buat tata letak linier dan itu akan memiliki 2 anak, scrollview dan tata letak linier lainnya. Beri mereka bobot tata letak dan ini dia:
sumber
Anda seharusnya tidak pernah menggunakan ScrollView dengan ListView, karena ListView menangani pengguliran vertikalnya sendiri. Yang paling penting, melakukan ini mengalahkan semua optimasi penting di ListView untuk berurusan dengan daftar besar, karena itu secara efektif memaksa ListView untuk menampilkan seluruh daftar itemnya untuk mengisi wadah tak terbatas yang disediakan oleh ScrollView.
http://developer.android.com/reference/android/widget/ScrollView.html
sumber
Persyaratan saya adalah memasukkan ListView dari item berukuran sama di dalam ScrollView. Saya mencoba beberapa solusi lain yang tercantum di sini, sepertinya tidak ada yang mengukur ukuran ListView dengan benar (terlalu sedikit ruang atau terlalu banyak). Inilah yang bekerja untuk saya:
Semoga ini bisa membantu seseorang.
sumber
Jangan pernah memasukkan bagian
ListView
dalamScrollView
! Anda dapat menemukan informasi lebih lanjut tentang topik itu di Google . Dalam kasus Anda, gunakan aLinearLayout
bukanListView
dan tambahkan elemen secara terprogram.sumber
Memperbarui
untuk
Intinya di sini adalah Anda mencoba mengatur ketinggian ke 0dp (tetap)
sumber
menemukan solusi untuk scrollview -> viewpager -> FragmentPagerAdapter -> fragment -> listview dinamis, tetapi saya bukan penulisnya. ada beberapa bug, tetapi setidaknya itu berfungsi
tata letak fragmen bisa apa saja
lalu di suatu tempat saja
sumber
Untuk menggunakan tampilan daftar di dalam Tampilan gulir, Anda dapat mengikuti langkah-langkah ini yang berfungsi untuk saya:
1) Buat file java NonScrollListView yang menonaktifkan properti gulir default tampilan-daftar. dan kode di bawah ini
2) Sekarang buat file xml yang memiliki
NestedScrollView
dan di dalamnya digunakanNonScrollListView
untuk daftar item Anda. Ini akan membuat seluruh layar Anda menggulir dengan semua tampilan.3) Sekarang di kelas java yaitu, home.java mendefinisikan
NonScrollListView
bukanListview
.home class public memperpanjang Fragment {int pos = 0; ViewFlipper v_flipper;
Catatan: Saya digunakan di
Fragments
sini.sumber
Ok, ini jawaban saya. Metode yang memperbaiki ketinggian ListView cukup tertutup, tetapi tidak sempurna. Jika sebagian besar barang memiliki ketinggian yang sama, itu berfungsi dengan baik. Tetapi jika itu tidak terjadi, maka ada masalah besar. Saya sudah mencoba banyak waktu, dan ketika saya mengeluarkan nilai listItem.getMeasureHeight dan listItem.getMeasuerWidth ke dalam log, saya melihat nilai lebar sangat bervariasi, yang tidak diharapkan di sini, karena semua item dalam ListView yang sama harus memiliki lebar yang sama. Dan itu dia bug:
Beberapa menggunakan ukuran (0, 0), yang sebenarnya membuat tampilan tidak terikat, di kedua arah, dan lebar menjadi liar. Beberapa mencoba mendapatkan Lebar listView, tetapi kemudian mengembalikan 0, tidak berarti.
Ketika saya membaca lebih lanjut tentang bagaimana Android membuat Tampilan, saya menyadari bahwa semua upaya ini tidak dapat mencapai jawaban yang saya cari, kecuali fungsi ini berjalan setelah tampilan di-render.
Kali ini saya menggunakan getViewTreeObserver pada ListView yang ingin saya perbaiki ketinggiannya, kemudian tambahkan OnGlobalLayoutListener. Di dalam metode ini, saya mendeklarasikan OnGlobalLayoutListener baru, di mana, kali ini, getWidth mengembalikan lebar sebenarnya dari ListView.
Value pad, adalah padding yang saya atur di layout ListView.
sumber
Jika karena alasan tertentu Anda tidak ingin menggunakan
addHeaderView
danaddFooterView
, misalnya ketika Anda memiliki beberapa daftar, ide yang baik adalah menggunakan kembaliListAdapter
untuk mengisi sederhanaLinearLayout
sehingga tidak ada fungsi gulir.Jika Anda sudah memiliki seluruh fragmen yang berasal dari
ListFragment
dan ingin mengonversinya menjadi fragmen yang sama dengan yang sederhanaLinearLayout
tanpa menggulir sebagai gantinya (misalnya untuk meletakkannya di ScrollView), Anda dapat menerapkan fragmen adaptor seperti ini:Anda juga mungkin ingin meneruskan
onCreate
,onPause
,onResume
, dll untuk fragmen asli tergantung pada kebutuhan Anda atau mencoba warisan bukan komposisi (tapi menimpa metode tertentu sehingga fragmen asli tidak benar-benar melekat hirarki tata letak); tapi saya ingin mengisolasi fragmen asli sebanyak mungkin, karena kita hanya perlu mengekstraknyaListAdapter
. Jika Anda menghubungi fragmen aslisetListAdapter
dionAttach
, itu mungkin cukup.Berikut cara menggunakannya
ListAsArrayFragment
untuk memasukkanOriginalListFragment
tanpa menggulir. Dalam aktivitas indukonCreate
:sumber
menemukan solusi untuk scrollview -> viewpager -> FragmentPagerAdapter -> fragment -> listview dinamis, tetapi saya bukan penulisnya.
tata letak fragmen bisa apa saja
lalu di suatu tempat saja
sumber
menggunakan ListView ini. Bekerja untuk saya
dan dalam xml
dan di MainActivity
Lihat artikel ini untuk info lebih lanjut dan juga untuk mengetahui cara menjaga tampilan gridview di dalam gulir
sumber
Dalam xml:
Di Jawa:
sumber
Cukup atur nilai tinggi yang diperlukan dalam atribut ketinggian tampilan daftar di dalam layar induk. Ini akan bergulir bersama dengan item anak orang tua lainnya.
sumber
Ini bekerja untuk saya ( link1 , link2 ):
Anda Membuat Custom ListView yang bukan dapat digulir
Di File Layout Anda
Buat objek dari customListview Anda alih-alih ListView seperti:
sumber
Panggil saja fungsi ini setelah menetapkan adaptor ke listview
sumber
sumber
Kode terbaik
sumber