Home / Android / Tips : Mengatasi ScrollView dan ListView Pada Android Dalam Satu Layout

Tips : Mengatasi ScrollView dan ListView Pada Android Dalam Satu Layout

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 :)

About alfach

Check Also

picasso

Menampilkan Image/Gambar dari Url Pada Android Menggunakan Picasso

Menampilkan image pada android merupakan hal yang gampang-gampang susah apalagi jika image tersebut diambil dari ...

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>