سلام.
حتی اگر بشه چنین کدی رو هم قرار داد که item ها را نگه دارد، بنده آن را توصیه نمی کنم، زیرا در برخی گوشی ها با حافظه RAM اندک، ممکن است برنامه قفل کند. بنده حدس می زنم که خود ListView به این صورت طراحی شده که تنها View مربوط به تعدادی item فعلی را نگه دارد تا از این مشکل جلوگیری شود (یعنی با اسکرول به بالا یا پایین ListView ، دوباره View مربوط به item هایی که در صفحه قرار می گیرند را می سازد)(برای کدنویسی مشابه
کلید شماره 843 دقیقا به همین شکل می باشد، ولی موردی که item ها را نگه دارد را تاکنون کدنویسی نکرده ام). در بخشی از کلید زیر، در این مورد، توضیحاتی داده شده :
کلید شماره 2961
همچنین باید ببینیم که شما ProgressBar را به چه صورت قرار داده اید و چه ارتباطی با ListView دارد. شاید با کمی تغییر در کدهای آن، اسکرول ListView در آن اختلالی ایجاد نکند.
بنده قبلا موردی داشتم که ProgressBar هنگام افزوده شدن تعدادی item به ListView ، به طور موقت نمایش داده می شد (البته در انتهای ListView). این نمایش، در api های جدید مشکلی نداشت، ولی برای یک نسخه قدیمی، مشکل داشت و ProgressBar به اندازه کل پایین صفحه، بزرگ نمایش داده می شد. دقیق حضور ذهن ندارم، ولی فکر می کنم با کمی دستکاری در کدهای لایه ها (layouts) در فایل های xml ، مشکل برطرف شد. البته همزمان با آن تغییرات، روش زیر را هم برای ListView به کار بردم :
کد پیاچپی:
lv.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
if ( scrollState == OnScrollListener.SCROLL_STATE_IDLE )
{
lv.invalidateViews();
}
}
@Override
public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {}
});
روش setOnScrollListener می تواند برخی تنظیمات مربوط به اسکرول در ListView را تغییر بدهد. مثلا بنده کد بالا را زمانی استفاده کردم که وقتی ListView کل صفحه را پر نمی کرد، در برخی api های قدیمی، اشاره بر روی item ها، از کار می افتاد.
بنابراین بنده بر اساس تجربه ای که دارم، توصیه می کنم که به صورت همزمان، هم کدهای مربوط به لایه ها را بررسی کنید و هم انواع کدنویسی برای روش setOnScrollListener و همچنین ویژگی های آنها را بررسی کنید و ببینید که موردی هست که مشکل شما را برطرف کند یا خیر.