نمایش تعداد زیادی آیتم در listview ?
تعداد خیلی زیادی داده قرار از سرور دریافت بشه و در یک custom listview نمایش داده بشه .
بهترین راه برای اینکه تمام داده ها یک باره لود نشن و مثلا 10 آیتم ، 10 آیتم نمایش داده بشه چیه؟
تکنیک lazy loading یا هر راه دیگه ای که مناسبتر هست ؟
من در پروژه ای این کار رو کردم. شما ابتدا تعدادی دیتا لود مکنید. مثلا 15 تا. بعد باید روی لیست چک کنید زمانی که اسکرول به انتهای صفحه رسید و همه لیست پیمایش شد دوباره 15 سطر دیگه رو میگیرید و به انتهای لیست ویو اضافه می کنید. مقداری از کد رو میزارم شاید به دردتون بخوره. پارامترهای متد رو log کردم تا دقیقا بفهمید هر کدوم چیه. هر چند از رو اسمش تابلوس دیگه.
lstContent.setOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
Log.i("Log", "firstVisibleItem=" + firstVisibleItem +
" | visibleItemCount=" + visibleItemCount + "" +
" | totalItemCount=" + totalItemCount);
if ( !isLoadMore && firstVisibleItem + visibleItemCount == totalItemCount) {
isLoadMore = true;
new loadAdsList().execute("");
}
}
ممنون از شما
از این کد نتونستم استفاده کنم :(
اما این کد مناسب کار من نیست چون به هرصورت تمام داده ها رو برنامه دریافت میکنه و فقط آروم آروم میریزه توی لیست ویو
من میخوام که وقتی وارد صفحه مورد نظر شدم 10 تا آیتم رو از سرور بگیره و نشون بده و وقتی اسکرول کردم پایین تر دوباره درخواست بفرسته به سرور و 10 تای بعدی رو لود کنه
یک کتابخونه پیدا کردم به اسم EndlessAdapter که همین روش lazy loading رو پیاده کرده اینم یک لینک توی stackoverflow
و اینم لینک خوده پروژه در گیت هاب خلاصه اینکه من نتونستم ازش سر دربیارم لطفا اگر کسی اطلاعی در این مورد داره و میتونه من و راهنمایی که بینهایت ممنون میشم
javac جان ، من یه مدت نبودم ، و الانم یک درگیرم ، پس ببخش دیر جواب دادم
به نظر من راه مناسب تر ، تعیین یک offset در دیتابیس هست ، یعنی تا الان چند ایتم گرفتیم
مثلا الان اولین بار برنامه offset صفر رو ارسال میکنه
www.server.com/service.php?offset=0
select * from mytable offset=0 limit=10
در مرحله بعد به سرور میگی که 10 تای اول رو داری ، پس 10 تای دوم رو میخوای
www.server.com/service.php?offset=0
select * from mytable offset=10 limit=10
و همین طور کار ادامه پدا میکنه ، تا داده های دریافتی کمتر از 10 بشه یه یعنی داده ی دیگه ای وجود نداره
موفق باشید
فک نمیکنم منظور ایشون کد سمت سرور باشه..کاری که شما میگید میشه page بندی که میشه از الگوریتم زیر استفاده کرد
select * from (select *,row_number() over (order by id) as r from tablename) t where r >10 and r < 15;
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .