PDA

View Full Version : اعمال تغییرات در ExpandableListView



Ghadiri_S
شنبه 22 مهر 1391, 15:25 عصر
سلام دوستان

من از ابزار ExpandableListView برای نمایش یک سری داده استفاده کردم و برای هر child از یک xml استفاده کردم به صورت child.xml و داخلش یک ImageView و یک TextView قرار دادم. خوب در حقیقت ExpandableListView رو اونجوری که می خواستم اپتیمایزش کردم.

اطلاعات رو به خوبی به کمک آرایه و یک ExpandableListAdapter میتونم درون ExpandableListView نمایش بدم. تا اینجا مشکلی ندارم.

اما بعد از این که اطلاعات رو نمایش دادم مثلا میخوام متن TextView در child سوم رو عوض کنم! هرچی بالاپایین رفتم نتونستم راهی براش پیدا کنم. چطور میتونم به متن یا تصاویر درون ExpandableListView بعد از ایجادشدنشون دسترسی داشته باشم و اون ها رو تغییر بدم؟

دوستان اگر لطف کنن و راهنمایی بفرمایند ممنون میشم

Ghadiri_S
شنبه 22 مهر 1391, 21:15 عصر
دوستان آیا با LayoutInflater میتونم این کار رو انجام بدم؟ اصلا این LayoutInflater چی هست با هاش چیکارهایی رو میشه انجام داد؟

Ghadiri_S
یک شنبه 23 مهر 1391, 15:40 عصر
من فقط یک روش به ذهنم رسید و اون اینکه مقدار آرایه ای رو که از طریق اون ExpandableListAdapter رو میسازم رو داخلش رو تغییر بدم. مثلا داده خانه به اندیس (2,5) رو با مقدار جدیدش عوض کنم بعد دوباره setAdapter کنم، خوب با این کار مشکل بصورت ظاهری حل میشه اما کلExpandableListAdapter از نو ساخته میشه!!!!
مثلا فرض کنید کلا 5 تا گروه ایجاد کردم که کاربر همشون رو باز کرده (collapse) حالا که از دستور setAdapter دوباره استفاده میکنم همه گروه ها بسته میشن، یا مثلا کاربر اسکرول کرده رفته پایین حالا فرضا یکی از خانه ها مقدارش میخواد عوض بشه همه چیز برمیگرد میشه حالت اول!!!!!

این اصلا خوشایند نیست!

دوستان راهی وجود نداره که بدون setAdapter فقط یک child خاص رو مقادیرش رو تغییر داد؟

مطمئن هستم راهش هست اما چطوری؟

Ghadiri_S
یک شنبه 23 مهر 1391, 17:32 عصر
دوستان ظاهرا یک روشی رو پیدا کردم. فقط یک مسئله ای داره!

اگر مکان یا همون posion مربوط به child مورد نظر رو داشته باشیم میتونیم اون child رو به کمک getChildView در داخل آداپتورمون یعنی همون ExpandableListAdapter در قالب یک view بدست بیاریم.

با این روش من تونستم متن داخل child مورد نظر رو بخونم. بعد حتی به راحتی میشه متن اون رو تغییر هم داد. من بررسی کردن بعد از اعمال تغییرات وقتی دوباره اون آداپتور رو چک کردم تغییر در آداپتور اعمال شده بود. تا اینجا همه چیز خوبه.

حالا مشکل اینجاست که چطور میشه ExpandableListView رو آپدیت کرد تا تغییرات اعمال شده در آداپتور رو نمایش بده؟

دوستان کسی نمیخواد به من تازه کار کمک کنه؟؟؟؟؟؟؟؟

Ghadiri_S
یک شنبه 23 مهر 1391, 21:28 عصر
من متوجه شدم notifyDataSetChanged در آداپتور باعث میشه تغییرات اعمال بشه، اما من بعد از اعمال تغییرات اطلاعات در آداپتور notifyDataSetChanged رو اجرا میکنم اما هیچ اتفادقی نمی افتده!!
بنظر شما اشکال از کجاست؟

Ghadiri_S
دوشنبه 24 مهر 1391, 10:12 صبح
با تشکر از لطف بینهایت دوستان که نصبت به من این همه ابراز کردن و تلاش کردن مشکل من رو حل کنند!!!!!!!!!!!!!!!
واقعا شرمنده شدم از دوستان عزیز ...........................!

بگذریم، من بالاخره راهش رو پیدا کردم، اشتباه من اینجا بود که تغییرات رو همیشه در سطح layout میدادن. و سعی میکردم یک view از child بگیرم و تو اون view تغییرات رو اعمال کنم بعد این view رو جایگزین کنم.

در حالی که باید تغییرات رو در سطح Map اعمال میکردم و در انتها notifyDataSetChanged رو اجرا میکردم.

با این وجود ممنون از دوستان که حداقل نوشته های من رو خوندند!