چطور از ListView درون ScrollView استفاده کنم ؟ [حل شد]
سلام دوستان
من میخوام اسکرول لیست ویو را غیر فعال کنم و اون را داخل یک scrollview بذارم تا کار اسکرول کردن را scrollview انجام بده نه لیست ویو برای این کار هم از این مطلب کمک گرفتم نشد لطفا اگه اطلاع دارید راهنمایی کنید.
هدف از این کار هم این هست که میخوام یک لایه مجزا و یک لیست ویو کنار هم داشته باشم که تا وقتی اسکرول میکنم اون لایه بره بالا و مقادیر لیست ویو نشون داده بشه که بهترین ایده برای اینکار قرار دادن اونها درون یک scrollview هست
شما باید برای لیست ویو که ساختید فقط یک هدر اضافی کنید و نیازی به scrollView نداره .
برای این کار هم باید یک لایه جدا درست کنید که لایه هایی که میخواید به لیست ویو بچسبونید توش میریزید با استفاده از Inflater یه دونه ازش میسازید و با استفاده از کد زیر به لیست ویو میچسبونید .
listView.addHeader(view);
و یا
listView.addFooter(view);
طبق تصویر زیر من میخوام یه چیزی بگیرم و بر اساس اون جستجو کنم و نتیجه را توی لیست ویو نشون بدم. و میخوام وقتی لیست ویو را به سمت بالا اسکرول میکنم قسمت جستجو مثل سایر آیتم های لیست ویو به سمت بالا بره و محو بشه و وقتی به سمت پایین اسکرول میکنم ظاهر بشه. یعنی طوری جلوه کنه که انگار اولین آیتم لیست ویو هست.حالا دو راه هست یا اینکه طبق روشی که من گفتم پیش بریم یا طبق روش شما و هدر تعریف کنیم. اگه هدر تعریف کنیم کد مربوط به جستجو را باید توی اکتیویتی شامل لیست ویو بنویسم یا توی adapter خود لیست ویو؟

پاسخ نهایی
وقتی یک listView را داخل یک ScrollView قرار میدید با استفاده از متد زیر که listView را به عنوان پارامتر ورودی میگیره میتونید اسکرول لیست ویو را حذف کرده و درواقع ارتفاع لیست ویو را به اندازه محتویات اون قرار بدید و اسکرول کردن را از طریق scrolview انجام بدید. بهترین مثال هم برای این سوالی که من دنبال جوابش بودم قسمت نظرات کافه بازار هست که در ui جدید به پایین صفحه منتقل شده.
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
if (listItem instanceof ViewGroup) {
listItem.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .