Saya mengalami masalah dengan pengguliran ListView
di dalam a ScrollView
. Saya memiliki Kegiatan yang memiliki beberapa EditText di bagian atas dan kemudian tab host dengan dua tab yang masing-masing memiliki satu ListView. Ketika tampilan EditText terfokus, keyboard lunak muncul dan karena saya memiliki ScrollView, konten dapat digulir. Tetapi masalahnya muncul ketika ada lebih banyak item di ListViews (yang ada di tab), saya tidak dapat menggulir ListView, bahkan jika ada lebih banyak item.
Berikut ini adalah tata letak XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="?backgroundImage"
android:orientation="vertical">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="50dip"
android:layout_alignParentBottom="true"
android:layout_margin="10dip"
android:id="@+id/buttons">
<Button
android:text="Save"
android:layout_margin="2dip"
android:textSize="20dip"
android:id="@+id/btnSaveorUpdate"
android:layout_height="wrap_content"
android:layout_width="145dip"></Button>
<Button
android:text="Cancel"
android:layout_margin="2dip"
android:textSize="20dip"
android:id="@+id/btnCancelorDelete"
android:layout_height="wrap_content"
android:layout_width="145dip"></Button>
</LinearLayout>
<ScrollView
android:layout_above="@id/buttons"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:layout_margin="10dip">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="10dip">
<TextView
android:text="Bill details"
android:textColor="?textColorDark"
android:layout_alignParentTop="true"
android:id="@+id/txtEnterDetails"
android:textSize="25dip"
android:textStyle="bold"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginBottom="2dip"></TextView>
<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0dip"
android:layout_height="0dip" />
<EditText
android:layout_width="fill_parent"
android:hint="Enter data"
android:inputType="numberDecimal"
android:id="@+id/txtSample"
android:textSize="@dimen/editText"
android:layout_height="@dimen/editTextHeight"
android:text=""></EditText>
<EditText
android:layout_width="fill_parent"
android:id="@+id/txtDescription"
android:hint="Enter description"
android:textSize="@dimen/editText"
android:layout_height="@dimen/editTextHeight"
android:inputType="text"
android:text=""></EditText>
<EditText
android:layout_width="fill_parent"
android:id="@+id/txtComment"
android:hint="Enter comment (if any)"
android:textSize="@dimen/editText"
android:layout_height="@dimen/editTextHeight"
android:inputType="text"
android:text=""></EditText>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txtDate"
android:layout_width="wrap_content"
android:text=""
android:textSize="20dip"
android:textColor="?textColorDark"
android:layout_marginLeft="10dip"
android:layout_height="@dimen/editTextHeight"
android:layout_gravity="center_vertical" />
<Button
android:id="@+id/btnPickDate"
android:layout_width="wrap_content"
android:layout_height="@dimen/editTextHeight"
android:text="Select date"
android:layout_margin="2dip"
android:textSize="15dip"
android:layout_gravity="center_vertical" />
</LinearLayout>
<TabHost
android:id="@+id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TabWidget
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@android:id/tabs"></TabWidget>
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@android:id/tabcontent">
<ScrollView
android:layout_above="@id/buttons"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true"
android:id="@+id/tab1">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TableLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<TableRow
android:id="@+id/tableRow1"
android:layout_marginLeft="2dip"
android:layout_marginRight="5dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:src="@drawable/ic_menu_invite"
android:layout_width="40dip"
android:layout_height="40dip"
android:layout_gravity="center_vertical"></ImageView>
<TextView
android:text="Add friend"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_centerVertical="true"
android:textColor="?textColorDark"
android:textSize="@dimen/editText"
android:layout_gravity="center_vertical" />
</LinearLayout>
</TableRow>
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip">
<TextView
android:id="@+id/txtData1"
android:layout_width="170dip"
android:layout_height="wrap_content"
android:text="Data"
android:textSize="14dip"
android:textStyle="bold"
android:textColor="#000000">
</TextView>
<TextView
android:id="@+id/txtData2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sample"
android:textSize="13dip"
android:textColor="#000000"></TextView>
</TableRow>
</TableLayout>
<ListView
android:cacheColorHint="#00000000"
android:id="@+id/ListView01"
android:layout_height="wrap_content"
android:layout_width="fill_parent" />
</LinearLayout>
</ScrollView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:id="@+id/tab2"
android:orientation="vertical">
<TableLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<TableRow
android:id="@+id/tableRow2"
android:layout_marginLeft="2dip"
android:layout_marginRight="5dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:src="@drawable/ic_menu_invite"
android:layout_width="40dip"
android:layout_height="40dip"
android:layout_gravity="center_vertical"></ImageView>
<TextView
android:text="Sample"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_centerVertical="true"
android:textColor="?textColorDark"
android:textSize="@dimen/editText"
android:layout_gravity="center_vertical" />
</LinearLayout>
</TableRow>
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip">
<TextView
android:id="@+id/txtUser1"
android:layout_width="170dip"
android:layout_height="wrap_content"
android:text="User"
android:textSize="14dip"
android:textStyle="bold"
android:textColor="#000000">
</TextView>
<TextView
android:id="@+id/txtUserData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="UserData"
android:textSize="13dip"
android:textColor="#000000"></TextView>
</TableRow>
</TableLayout>
<ListView
android:cacheColorHint="#00000000"
android:id="@+id/ListView02"
android:layout_height="wrap_content"
android:layout_width="fill_parent" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
</ScrollView>
</RelativeLayout>
Bisakah ada yang memberi tahu saya apa masalahnya di sini? Saya memiliki posting lain pada masalah ListView di dalam ScrollView, tetapi tidak ada gunanya dalam kasus saya.
android
listview
android-layout
scrollview
Ashwani K
sumber
sumber
Jawaban:
Anda tidak boleh meletakkan
ListView
di dalam aScrollView
karenaListView
kelas mengimplementasikan penggulirannya sendiri dan itu hanya tidak menerima gerakan karena semuanya ditangani oleh orang tuaScrollView
. Saya sangat menyarankan Anda untuk menyederhanakan tata letak Anda. Misalnya, Anda dapat menambahkan tampilan yang ingin Anda gulir keListView
header atau footer sebagai.PEMBARUAN :
Mulai dari API Level 21 (Lollipop) wadah gulir bersarang secara resmi didukung oleh Android SDK. Ada banyak metode
View
danViewGroup
kelas yang menyediakan fungsi ini. Untuk membuat pengguliran bersarang bekerja di Lollipop Anda harus mengaktifkannya untuk tampilan gulir anak dengan menambahkanandroid:nestedScrollingEnabled="true"
deklarasi XML atau dengan memanggil secara eksplisitsetNestedScrollingEnabled(true)
.Jika Anda ingin membuat pengguliran bersarang berfungsi pada perangkat pra-Lollipop, yang mungkin Anda lakukan, Anda harus menggunakan kelas utilitas yang sesuai dari pustaka Dukungan. Pertama, Anda harus mengganti Anda
ScrollView
dengan NestedScrollView . Yang terakhir mengimplementasikan NestedScrollingParent dan NestedScrollingChild sehingga dapat digunakan sebagai induk atau wadah gulir anak.Tetapi
ListView
tidak mendukung pengguliran bersarang, oleh karena itu Anda perlu mensubclass dan mengimplementasikannyaNestedScrollingChild
. Untungnya, pustaka Dukungan menyediakan kelas NestedScrollingChildHelper , jadi Anda hanya perlu membuat turunan dari kelas ini dan memanggil metodenya dari metode yang sesuai dari kelas tampilan Anda.sumber
ListView
aneh. Tapi tata letak Anda sangat sangat rumit. Aku bahkan tidak bisa mengerti seperti apa bentuknya. Pokoknya Anda lebih baik membuatnya lebih sederhana karenaListView
bersarang ke dalamScrollView
yang bersarang ke yang lainScrollView
terlihat aneh dan tidak akan berfungsi.Saya menemukan solusi yang bekerja sangat baik dan dapat menggulir
ListView
tanpa masalah:Apa yang dilakukan adalah menonaktifkan
TouchEvent
s padaScrollView
dan membuatListView
mencegatnya. Ini sederhana dan berfungsi setiap saat.sumber
Saya juga punya satu solusi. Saya selalu menggunakan metode ini. Coba ini
Kelas NestedListView.java:
sumber
LinearLayout
daripada aListView
. Ini berarti bahwa jika Anda memiliki sejumlah besar item daftar (atau item daftar kompleks) maka perangkat android akan membutuhkan banyak waktu untuk membuka aktivitas (atau bahkan crash saat mencoba dalam kasus saya)Anda hanya perlu mengganti
<ScrollView ></ScrollView>
dengan yangCustom ScrollView
seperti ini<com.tmd.utils.VerticalScrollview > </com.tmd.utils.VerticalScrollview >
sumber
Saya memiliki masalah yang sama dan ketika mencari di Google, saya menemukan pertanyaan Anda. Ya jawaban yang ditandai bekerja untuk saya juga tetapi ada beberapa masalah.
Bagaimanapun saya menemukan solusi lain . yang bekerja dengan sempurna tanpa melakukan jugglery.
sumber
sumber
Berikut adalah metode tepat menggunakan Listview di dalam Scrollview. Kita semua harus menangani acara sentuh.
sumber
Gunakan metode berikut dan nikmatilah!
listViewTouchAction adalah nilai integer global. Jika Anda bisa mengganti salurannya
dengan sesuatu yang lain tolong bagikan dengan kami.
Nikmati!
sumber
Merupakan praktik yang buruk untuk memiliki dua tampilan gulir yang berbeda secara bersamaan. ListView sendiri memiliki fungsi gulir sendiri dan ketinggian disesuaikan secara otomatis sesuai dengan pengaturan Adaptor untuk item baris Anda (Memperhatikan, kami tidak mengatur tinggi khusus untuk ListView di Layout xml kami). Namun dalam kasus Anda, Anda dapat mengganti ListView dengan kelas dan ini akan menyesuaikan ketinggian untuk ListView Anda dengan mengingat bahwa ListView Anda ada di dalam ScrollView.
Ini akan membantu Anda:
Sekarang rentangkan ListView Anda dengan kelas ini, cukup ubah tag ListView Anda dari xml sumber daya Anda menjadi seperti ini,
Ini akan menyelesaikan masalah pengguliran Anda dari ListView, karena sekarang pengguliran induk dikelola oleh ScrollView daripada ListView.
sumber
Saya tahu pertanyaan ini sudah lama ditanyakan, tetapi siapa yang pernah terjebak untuk saat ini dapat menyelesaikan ini dengan menambahkan baris ini ke dalam ListView Anda
Sebagai contoh -
sumber
Saya mengalami masalah serupa dan diselesaikan dengan membuat kelas khusus dengan memperluas dengan ListView.
ScrollableListView.java
Pemakaian:
sumber
Demo_ListView_In_ScrollView
==============================
========================
listview_adapter
==========================
===================================
Kelas pembantu
====================================
========================
demo_listview_in_scrollview_activity.xml
========================
================
item_list_xml.xml
==================
sumber
Solusi terbaik adalah dengan menggunakan NestedScrollVew dengan RecyclerView atau jika Anda ingin menggunakan Listview maka Anda dapat menambahkan tampilan header dan footer untuk ini. Sebagai contoh:
sumber
Saya telah mencoba dan menguji hampir semua metode yang disebutkan di atas, percayalah, setelah sepenuhnya melarikan diri dari RecyclerView, saya mengganti ListView saya dengan RecyclerView dan bekerja dengan sempurna. Tidak memerlukan pustaka Pihak ke-3 untuk ExtendedHeightListView dan semuanya, hanya RecyclerView yang sederhana dan sederhana.
Jadi, inilah file Layout saya sebelum recyclerView:
INI SETELAH MENGGANTI LISTVIEW SAYA DENGAN SALAH SATU SOLUSI BANYAK YANG DISEBUTKAN DI ATAS. Jadi masalahnya adalah bahwa listview tidak berlaku dengan benar karena 2 bug scrollview (mungkin bukan bug) di android.
Saya mengganti dengan tampilan pendaur ulang untuk membentuk tata letak akhir saya.
Ini adalah adaptor tampilan pendaur ulang saya:
Dan ini adalah tata letak kustom RecyclerView saya:
Dan VOILA, saya mendapatkan efek yang diinginkan dari ListView (Sekarang RecyclerView) dalam scollview. Inilah Gambar Akhir dari UI
Pada catatan terakhir, saya percaya bahwa mengganti RecyclerView adalah pilihan yang lebih baik bagi saya, karena itu meningkatkan stabilitas aplikasi secara keseluruhan, dan juga membantu saya memahami RecyclerView dengan lebih baik. Jika saya menyarankan solusi, saya akan mengatakan ganti ListView Anda dengan RecyclerView.
sumber
Solusi di atas yang diberikan oleh @Shailesh Rohit bekerja dengan sangat baik. Beberapa trik harus dilakukan.
Jika Anda meletakkan kelas helper di dalam kelas yang sama (kelas utama) maka jadikan kelas Helper sebagai statis dan getListViewSize () tidak statis.
Paling penting, tulis "Helper.getListViewSize (listView);" pernyataan setelah mengatur adaptor untuk pertama kalinya seperti "listView.setAdapter (myAdapter);" serta kapan pun Anda menggunakan "myAdapter.notifyDataSetChanged ();"
Penggunaan ditunjukkan di bawah ini.
listView = (ListView) findViewById (R.id.listView); myAdapter = ArrayAdapter baru (ini, android.R.layout.simple_list_item_1, listValues); listView .setAdapter (myAdapter); Helper.getListViewSizelistView (listView);
myAdapter.notifyDataSetChanged (); Helper.getListViewSizelistView (listView);
sumber
As Menurut saya saat Anda menggunakan om om setOnTouchListener orang tua atau anak menghentikan pengguliran orang tua saat Anda menyentuh anak lain, berhenti menggulir anak saat Anda menyentuh orang tua
sumber
Coba ini dengan ScrollView, bukan dengan ListView.
sumber
requestDisallowInterceptTouchEvent (boolean disallowIntercept)
Coba jawaban ini,
sumber
ganti ListView oleh RecycleView di dalam ScrollView. ini berjalan dengan lancar tanpa kode sumber tambahan:
sumber
Untuk ListView di dalam ScrollView gunakan NestedScrollView, ia dapat menangani fungsi ini dengan sangat mudah:
sumber
Saya mengalami kesalahan ini. Dan solusi saya adalah sebagai berikut:
1. Buat tampilan daftar kustom yang tidak dapat digulir
}
2. Gunakan kelas khusus di atas untuk file xml
Semoga yang terbaik untukmu.
sumber
Saya menemukan solusi untuk itu, Daripada menggunakan scrollview, Anda dapat menggunakan addHeaderview dan addFooterview of listview
Ini cuplikan saya,
Sekarang, dengan tampilan daftar tata letak Anda juga dapat digulir. Bersenang senang lah!!!
sumber
Ganti ScrollView dengan android.support.v4.widget.NestedScrollView di dalam xml. itu berjalan
1) Gunakan dalam XML ::::
android.support.v4.widget.NestedScrollView
dari pada::::
ScrollView
2) Dan gunakan untuk tampilan daftar dengan cara ini menggunakan NonScrollListView dalam file cs:
3) Akhirnya gunakan kode ini untuk mengidentifikasi scrollview dalam file cs:
sumber
Kode Terbaik
sumber
Menambahkan:
android:nestedScrollingEnabled="true"
sumber
Gunakan metode ini dan listview Anda menjadi scrollable di dalam scrollview: -
sumber
Anda tidak dapat menambahkan ListView dalam tampilan gulir, karena tampilan daftar juga scolls dan akan ada masalah sinkronisasi antara gulir tampilan daftar dan gulir tampilan scoll. Anda dapat membuat Tampilan CustomList dan menambahkan metode ini ke dalamnya.
sumber
Jangan berikan tampilan gulir
ListView
, karena memiliki pengaturan defaultsumber