بازگذاری داینامیک آیتم ها در لیست ویو [حل شد]
سلام ، من مشکلی ندارم که چطوری بگیریم چیکار کنم و ... !
مشکل اینه ، کی لود کنم !
Listview.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
}
});
خوب ، با این دستورات ، ما میتونیم چک کنیم ببینیم باید آپدیت بشه یا نه ، اما سوال اینجاست ، میخوام ببینم کل ارتفاع لیست الان چقدره ، موقعیت فعلی کجاست ! ، یا اگه شما الگوریتم خوبی واسه زمان بارگذاری آیتم های جدید دارید ، ممنون میشم بگید
مشکل حل شد و نمونه پروژه در این سوال قرار گرفت
اتفاقا امروز داشتم با برنامم ور میرفتم ، این مبحث افزوده شدن آیتم ها به لیست موقع رسیدن به انتهای لیست اونقدر ترسناک بوده برام که اصلا حتی به مثال هایی که پیدا کردم هم نگاه نمیکردم ، الان الکی این طوری نوشتم و در عین ناباوری موقع رسیدن به انتهای لیست اطلاعات جدید وارد لیست شد :
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (totalItemCount == visibleItemCount + firstVisibleItem) {
btnAddDefaults(view);
adapter.refresh();
}
}
});
اسپیریت جان شاید عمل کرده باشه ، ولی الگوریتم درستی نیست ! من خودم چند حالت رو تست کردم ! ، شما با یه 2 2 تا 6 تای ساده میتونید بفهمید !
totalItemCount // کل آیتم های لیست
visibleItemCount // کل آیتم هایی که قابل مشاهده هستند
firstVisibleItem // اولین آیتمی که مشاهده میشه
scrollState // الان کاربر اسکرول رو نگه داشته ، داره اسکرول میکنه یا تموم شده یا ... که خیلی مهم نیست واسه ما
AbsListView view // راست و حسینی ، دقیق نمیدونم !
کل آیتم ها == کل آیتم های قابل مشاهده + اولین آیتم قابل مشاهده
یعنی در واقع برای شرط ممکنه این حالت پیش بیاد !
if(15+60==400){
// load new items !
}
چیزی که من دنبالشم اینه ! ، میگیم برادر من ، کل ارتفاع لیست ویو چقدره ؟ پاسخ -> 4000
میگیم فدات شم الان اسکرولت کجاست ؟! ، میگه 2000 !
میگیم دمت گرم ، هر وقت رسیدی به 500-4000 یه ندا بده ما آیتم جدید لود کنیم !
حالا ما میتونیم ارتفاع لیست ویو یا گرید ویو رو بگیریم اما اینکه بقیش :| !
همونی که همین دوستمون گفت درسته
https://github.com/commonsguy/cwac-endless
لینک stackoverflow را هم بخون ببین همونیه که میخوای :
.................................
اینم ببین ... البته فکر کنم برای load عکس باشه
دوست عزیز جواب سوالت خیلی سادست . . .
به هر آیتم یک ID اختصاص بده و زمانی که اونارو به لیست ویو ADD میکنی تعداد دقیق رو بگیر.البته تعداد میتونه آخرین ID هم باشه ، اگر خواستی بدونی الان کجای لیست هستی و کدوم ID دیده میشه فقط کافیه ID آیتمی که ساخته میشه (نمایش داده میشه) رو بگیری . آیدی رو هم توی Struct Note با توجه به مثال استاد درست کن و تمام . . .
من هم توی برنامم همین مشکل رو داشتم و اینجوری رفعش کردم.
بنا به درخواست دوستان جوابش کردم
این دمو تقریبا نمونه خوبی برای آپدیت لیست ویو با Json هست.
  http://www.uplooder.net/cgi-bin/dl.cgi?key=b68eeb56bfc5dff50797ba2730329122
دوست از همه تون ممنون ، حل شد
هر آیتم توی Struct باید id داشته باشه ، وقتی لیست داره به آخر میرسه ، قطعا آخرین آیتم لود میشه دیگه ! بنابراین ما تو آداپتور مون میگیم :
public void fill(final ArrayAdapter adapter, final StructImages item,final int position){
if (item.positi GridArray.get(GridArray.size() - 1).position && !G.isLoadingNewItems) {
// Load More Items !
}
// Fill Item !
}
من با متغییری به نام isLoadingNewItems چک می کنم اگه یه بار درخواست فرستاده بودم ، دوباره نفرستم ، وقتی کار لود کردن تموم شد ، isLoadingNewItems رو دوباره false میکنیم تا دفعه ی بعد هم که به آخر رسید شرط کار کنه !
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .