Bagi yang melakukan implementasi ScrollView dan ListView dalam satu layout di android, akan menyebabkan scrollview tidak berfungsi atau tampilannya tidak sesuai dengan diharapkan. Ini dikarenakan keduanya memiliki fungsi yang sama, yaitu scroll.
Namun, anda dapat mengatasi dengan sejumlah cara agar dapat berfungsi, yaitu :
1. code 1:
ListView lv = (ListView) findViewById(R.id.layout_lv); lv.setOnTouchListener(new OnTouchListener() { // Setting on Touch Listener for handling the touch inside ScrollView @Override public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of child view v.getParent().requestDisallowInterceptTouchEvent(true); return false; } });
Kode diatas akan scrollview dan listview anda berfungsi, namun pada listview layout_height nya hanya menampilkan satu baris data yang dapat discroll.
2. code 2 :
ListView list = (ListView) view.findViewById(R.id.ls); setListViewHeightBasedOnChildren(list);
methode setListViewHeightBasedOnChilder :
/**** Method for Setting the Height of the ListView dynamically. **** Hack to fix the issue of not showing all the items of the ListView **** when placed inside a ScrollView ****/ public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) return; int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED); int totalHeight = 0; View view = null; for (int i = 0; i < listAdapter.getCount(); i++) { view = listAdapter.getView(i, view, listView); if (i == 0) view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT)); view.measure(desiredWidth, MeasureSpec.UNSPECIFIED); totalHeight += view.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); listView.requestLayout(); }
sementara code 2, akan membuat layout_height menjadi dinamis dibandingkan code 1.
selamat mencoba 🙂