خانه » لایبرری های مفید و تجربیات شخصی خیلی مفید !!! » قرار دادن لیست (ListView) داخل اسکرول (Scroll View)

قرار دادن لیست (ListView) داخل اسکرول (Scroll View)

با اینکه این کار اصلا خوب نیست و باید سعی کنید که از این کار بپرهیزید اما بازم شاید بعضی وقت ها مجبور به استفاده از اون بشید :

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;
    }
});

با این کد تاچ اسکرین روی لیست ویو به لیست ویو تعلق می گیرد و اسکرول ویو نمی تواند از آن استفاده کند ، نتیجه اینکه وقتی روی لیست پایین بالا می کنید لیست جابه جا میشه وقتی هم خارج اون تاچ می کنید اسکرول ویو جابه جا می شه

و بعضی وقت ها در این شرایط سایز لیست ویو مشکل پیدا میکنه که از این کد میشه استفاده کرد :

/**** 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();
}

 

در آخر با اضافه کردن این متد به کد ها ، تنظیمات به این شکل می شود :

ListView list = (ListView) view.findViewById(R.id.listView);
setListViewHeightBasedOnChildren(list);
list .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;
    }
});

 

منبع : http://stackoverflow.com/questions/18367522/android-list-view-inside-a-scroll-view/19311197#19311197

برچسب ها:
پست قبلی
پست بعدی

درباره ایلیا عابدینی

برنامه نویس اندروید و کارشناس مهندسی پزشکی،
نفر سوم مسابقه برنامه نویسی اندروید http://www.schallenge.ir
، از سال 92 برنامه نویسی اندروید رو شروع کردم و در حال حاضر در شرکت عصر دانش در حال توسعه اپلیکیشن تجارت پی می باشدم ، این وبلاگ رو ساختم تا تجربیات روزانه و مفید خودم رو داخل اون بزارم.
رزومه : iact.ir/cv

3 دیدگاه

  1. سلام

    دمت گرم از این که تجربیاتت رو در اختیار دیگران هم می ذاری

  2. مرسی. این کد رو لازم داشتم .امیدوارم همیشه پیروز و موفق باشید

  3. مرسی بابت راهنماییتون

پاسخ به مهدی لغو پاسخ

آدرس ایمیل شما منتشر نمی شود.علامت دارها لازمند. *

*

رفتن به بالا