آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نمایش تعداد زیادی آیتم در listview ?

javac  12 سال پیش  12 سال پیش
+5 0

تعداد خیلی زیادی داده قرار از سرور دریافت بشه و در یک custom listview نمایش داده بشه . 

بهترین راه برای اینکه تمام داده ها یک باره لود نشن و مثلا 10 آیتم ، 10 آیتم نمایش داده بشه چیه؟

تکنیک lazy loading یا هر راه دیگه ای که مناسبتر هست ؟

 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
na3er-faraji  12 سال پیش
+3 0

  من در پروژه ای این کار رو کردم. شما ابتدا تعدادی دیتا لود مکنید. مثلا 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("");
                }
            }
0 0
تایید میشه راح حل مناسبی هست تنها مشکلش اینه که اگه داده ها خیلی زیاد باشند و تا آخر لود کنیم حافظه زیادی اشغال میشه بهتر اینه که همیشه تنها مثلا 50 تا رکورد نمایش داده بشه . (12 سال پیش)
پاسخ به سوال 
javac  12 سال پیش
0 0

ممنون از شما 

از این کد نتونستم استفاده کنم :(

اما این کد  مناسب کار من نیست چون به هرصورت تمام داده ها رو برنامه دریافت میکنه و فقط آروم آروم میریزه توی لیست ویو

من میخوام که وقتی وارد صفحه مورد نظر شدم 10 تا آیتم رو از سرور بگیره و نشون بده و وقتی اسکرول کردم پایین تر دوباره  درخواست بفرسته به سرور و 10 تای بعدی رو لود کنه

0 0
کسی نبود؟!! (12 سال پیش)
0 0
خیر کدی که من گزاشتم یک دفعه دریافت نمیکنه. من فک میکنم دریافت همه داده ها به صورت یک دفعه بزرگترین اشتباهیه که میکنید. فک کنید تعداد 50000 تا رکورد باشه که گوشی طرف میترکه. من اول 15 تا دیتا لود میکنم بعد چک میکنم هر موقع اسکرول به انتهای لیست رسید دوباره لودینگ نشون بده و 15 تای دیگه رو بگیر.البته کد رو کامل نزاشتم. و فقط قسمت چک کردن اینکه اسکرول به انتها رسیده رو گذاشتم. (12 سال پیش)
0 0
چرا من پیامتون رو ندیدم!!(مشکل داره واقعا سیستم اطلاع رسانی سایت) خب همونطورکه گفتم متوجه کد نشدم که چی به چی هست اگر میشه یه کم بیشتر توضیح بدین خیلی ممنون (12 سال پیش)
پاسخ به سوال 
javac  12 سال پیش
0 0

یک کتابخونه پیدا کردم به اسم EndlessAdapter  که همین روش lazy loading رو پیاده کرده اینم یک لینک توی  stackoverflow

و اینم لینک خوده پروژه در گیت هاب  خلاصه اینکه من نتونستم ازش سر دربیارم لطفا اگر کسی اطلاعی در این مورد داره و میتونه من و راهنمایی که بینهایت ممنون میشم

 

 

پاسخ به سوال 
مجتبی یگانه  12 سال پیش
0 0

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 بشه یه یعنی داده ی دیگه ای وجود نداره

موفق باشید

0 0
درو اقع چیزی که مد نظرم هست مثله فیسبوک یا حتی کافه بازار و ... هست وقتی به انتهای اسکرول رسید داده های دیگه دریافت میشه و در اسکرول نمایش داده میشه خب من میخوام بدونم که از چه روشی استفاده میکنند ؟ و کدوم روش بهتر هست و یه سورس کد و راهنمایی هم کنید که چه بهتر؟ (12 سال پیش)
0 0
همون محل اسکرول مناسبه :| (12 سال پیش)
پاسخ به سوال 
na3er-faraji  12 سال پیش
+1 0

فک نمیکنم منظور ایشون کد سمت سرور باشه..کاری که شما میگید میشه page بندی که میشه از الگوریتم زیر استفاده کرد

 select * from 
(select *,row_number() over (order by id) as r from tablename)
t where r >10 and r < 15;

 

0 0
فکر کنم روش پیج بندی هم که خودتون و آقا مجتبی گفتین جواب بده اما آیا روش اصولی و درستی برای اینکار هست؟ و راه مناسبتر رو من میخوام بدونم چیه و نرم افزار های مشابه کدوم رو استفاده می کنند (12 سال پیش)
+1 0
به نظرم سورس سمت سرور من سریع تر اجرا بشه ، ولی باید برسی کرد ، ولی واسه سورس سمت اندروید که فکر نکنم خیلی دووشوار باشه ، فقط باید مکان اسکرول لیست رو چک کنی ، اگه نزدیک آخراش بود ، دوباره به سرور وصل شه آیتم اضافه کنه که دوستمون هم گفت (12 سال پیش)
+1 0
بله. بهینه ترین روش که حتی توی بازار دیوار و سایر نرم افزارهای مشابه استفاده میشه همینه. که من خودم هم توی نرم افزاری این کار رو انجام دادم و هیچ مشکلی نداشت.شما یک متغیر استاتیک تعریف میکنید که سری اول 1 هستش. هر بار که دیتا لود میشه یکی به این عدد اضافه میشه.مثلا اگه یک ارسال بشه یعنی اطلاعات ردیف 1 تا 15 اگه دو ارسال بشه یعنی اطلاعات ردیف 16 تا 30 و ... (12 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .