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

باگ در لیست ویو استاد !

Criss  10 سال پیش  10 سال پیش
+6 0

سلام دوستان

امروز داشتم روی ListView ایی کار میکردم که مقادیرش توسط Preferences ها و لیستی از فایل های دانلود شده موجود درون فولدر برنامه  ساخته میشه

که بعضی موقع باگ عجیبی رو در حین کار متوجه میشدم (افزایش تعداد ایتم های لیست ویو !) < که این باگ خیلی کم صورت میگرفت و کاملا بصورت اتفاقی روی میداد ! کمی عجیب بود ! <

از اونجایی که من وسواس دارم و تا دلیل چیزی رو ندونم ولش نمیکنم < کلی کلنجار رفتم و بلاخره متوجه شدم دلیل باگ چی هست <

اگر دقت کنید < طبق آموزش های استاد ما یک ArrayList داریم که آداپتر مربوط به لیست ویو با اون پر میشه و در واقع هر تعداد که Object درون این آرایه باشه به همون تعداد آیتم در لیست ویو دارید

 public static ArrayList<StructValue> notes = new ArrayList<StructValue>();

هیچ جایی از آموزش های استاد ایراد نداره < اما این باگ در یک حالت  روی میده :

اگر کاربر با استفاده از دکمه Back از Activity شما خارج بشه < در واقع Activity شما Destroy میشه اما Appication شما هنوز در حافظه Device فعال هست پس ArrayList که در بالا در کلاس G تعریف شده < هنوز با تمام متغیرها روی حافظه موجود هست

در همین حالت اگر کاربر برنامه رو از روی Icon مربوطه Launch کنه باعث میشه Activity شما OnCreate بشه و آرایه شما دوباره از  اول مقدار دهی بشه و این باعث میشه ListView شما دوبرابر Item نشون بده <

برای جلوگیری از این باگ حتما دقت کنید < در Activity که مقادیر ArrayList مربوط به Adapter لیست ویو رو دارید ست میکنید ، توی همون Activity برای قسمت OnDestroy تمام ArrayList ها ر Clear() کنید (البته بستگی به برنامه شما م نحوه کد نویسی شما هم داره)

+1 0
فکر میکنم استاد در این رابطه از Clear استفاده کرده باشند در آموزش ها و این مشکل خیلی طبیعی هست همونطور که اشاره کردید پروسس بسته نشده و چون آرایه در کلاس G به صورت استاتیک نوشته شده آیتم های تکراری توش قرار میگیره ، کار ساده تر این هست آرایه را موقع اجرای متد Oncreat در کلاس مربوطه نمونه سازی کنید . (10 سال پیش)
0 0
احسنت criss . همین اتفاق توی لیست ویوی من هم می افتاد اگه یادت باشه ؟ ولی درست شد (10 سال پیش)
 برای این سوال پاسخی وجود ندارد.

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