مشکل کرش (crash)کردن لیست ویو (listview)
زمانی که من روی تب هام که هر کدوم شامل یک لیست ویو هستن چند بار مرتب تپ می کنم برنامه من کرش میکنه و ارور زیر رو میده
05-25 11:58:18.571: E/AndroidRuntime(22454): FATAL EXCEPTION: main
05-25 11:58:18.571: E/AndroidRuntime(22454): Process: first_project, PID: 22454
05-25 11:58:18.571: E/AndroidRuntime(22454): java.lang.IllegalStateException:
The content of the adapter has
changed but ListView did not receive a notification. Make sure the content of your adapter is
not modified from a background thread, but only from the UI thread. Make sure your adapter
calls notifyDataSetChanged() when its content changes. [in ListView(2130968597, class
android.widget.ListView) with Adapter(class first_project.AdapterList)
ممنون میشم راهنمایی کنید
این قسمت داره به وضوح مشکل رو میگه :
The content of the adapter has changed but ListView did not receive a notification. Make sure the
content of your adapter is not modified from a background thread, but only from the UI thread
محتوای آداپتور تغییر کرده ، اما روی لیست ویو اعمال نشده ، یعنی Notify نشده :| در بخش دوم هم میگه ، مطمئن بشید که آداپتور از Thread UI ویرایش شده ، شاید شما در یک Thread دیگه ، این کار را انجام دادید ، که در این حالت باید از یک Handler استفاده کنید
مشکل حل شد باید آرایه رو یه بار clear میکردم چون هر بار که روی تب کلیک میکردم لیست ویو پر میشد و با زیاد شدن لیست برنامه کرش میکرد
خداروشکر:)
من با لیست ویو و گرید ویو خیلی مشکل داشتم و دارم و باید بگم خیلی تمرین میخواد تا خوب بتونی ازش استفاده کنی
Notify یعنی مطلع کردن ، وقتی شما آرایه ای که متصل به لیست هست رو تغییر میدی ، باید Adapter لیست را NotifyDataSetChanged بکنی ، تا تغییرات روی لیست اعمال بشه
Handler : وقتی از Thread استفاده بشه ، کارها به یک فرزند سپرده میشه (یعنی یه کارگر جدید) ، حالا این کارگر ها یک سری محدودیت ها دارند ، مثلا اعمال کردن تغییرات در UI مثل تغییر متن تکست ویو ، نمیتونه از طریق یک Thread کارگر انجام بشه ، حتما باید از طریق Thread اصلی برنامه انجام باشه ، اینجاست که ما به کارگر میگیم ، هر وقت کاری داشته ، صدا بزن من بیام !
استاد کامل تر توضیح دادند ، قبلا پرسیده شده ، و یادم میاد SileceWolf پاسخ کامل تری داده بودند :)
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .