درود و وقت بخیر...
میخواستم ازتون خواهش کنم که میشه لطف کنین و در مورد پیاده سازی این موردی که الان توضیح خواهم داد کمی راهنماییم کنین...
خب...
قراره یه سلسه مراتب درختی رو در قالب یه اپ ساده Todo و با زبان کاتلین و با استفاده از دیزاین پترنها، معماری MVVM، کتابخونههای JetPack و اگه بتونم هم از Hilt برای پیاده سازیش استفاده کنم...
و اساس کار به این صورت هستش که که هر گره (todo) میتونه بینهایت زیر مجموعه «از جنس خودش» داشته باشه و هر زیر مجموعه هم بینهایت زیر مجموعه و الی آخر...
همچنین اگه رو گره (todo) پدر کلیک شد، تمام زیر مجموعه هاش هم تیک بخورن
و بر عکسش هم به این صورت که اگه، تیک گره(todo) فرزند رو برداریم، تیک تمام گره های پدر هم برداشته بشه...
این از طرح کلی برنامه...
و اما مشکلی که بهش برخوردم...
تا اینجا پیش رفتم که یه لیستی دارم و میتونم بهش todo اضافه کنم و اون todo ها رو در قالب ریسایکلر ویو نمایش بدم...
ولی مشکل اصلی من اینجاست که وقتی میخوام روی هر کدوم از آیتمهای ریساکلر ویو کلیک کنم و برم به صفحه بعد تا بتونم زیر مجموعههاش رو اضافه کنم و اونها رو نمایش بدم به مشکل خوردم...
البته این رو هم بگم که برنامه فقط از یک فراگمنت به صورت زیر استفاده میکنه:
DeepinScreenshot_select-area_20200823191525.png
مدل todoی که تعریف کردم شامل فیلدهای زیر هستش:
var name: String,
var parent_id: Long ,
var id: Long
به این صورت کار کردم که اومدم و id آیتمی که روش کلیک شده رو گرفتم، و در صفحهای که قراره آیتمهای فرزند رو اضافه کنم و نمایش بدم، این id رو به عنوان parentId برای گره فرزند (todoی فرزند) قرار دادم و ذخیره میکنم...
ولی وقتی که روی آیتم پدر که کلیک میکنم تا بره صفحه بعد و todoهای فرزندش رو نشون بده، به مشکل برخوردم و دقیقا تمام آیتم هایی که وارد کردم رو نشون میده، نه todoهای فرزندش رو...
و صفحه اول برنامه که فقط قراره todoهای پدر رو نشون بده، متاسفانه تمام todoها رو نشون میده...
که فکر کنم به خاطر این هستش که در ابتدا فیلدی به نامvar parentId: Long ?=0رو داخل فراگمنت تعریف کردم و با کلیک بر روی هر آیتم، وقتی میره تا فراگمنت فرزند رو نشون بده، میره و متد oncreteView رو که لود کنه، باز همون parentId پدر رو که در ابتدا مقدار صفر رو بهش دادم رو به viewModel میده و همه آیتم هایی که میخوام وارد کنم رو با همین parentId ذخیره میکنه و برای همینم هست که همه رو با parentId صفر ذخیره میکنه و و داخل ریسایکلر ویو نشون میده...
که از اینجا به بعد رو واقعا تو پیاده سازیش به مشکل خوردم و واقعا نمیدونم چه جوری باید حلش کنم که در هر صفحه فرزند بتونم لیست فرزندان رو داشته باشم و ذخیره کنم
تنها چیزی که میدونم اینه که بایستی از دیزاین پترن Composite استفاده کنم ولی نمیدونم چجوری و به چه شکلی...
به نظرتون باید یه آداپتر جدا برای لیست پدر و یه آداپتر دیگه برای لیست فرزندان بسازم...
که میخواستم ازتون عاجزانه خواهش کنم که میشه کمی راهنماییم کنین...
و در پایان هم ازتون بسیار ممنون و سپاسگزارم که زمانی رو برای خوندن این نوشته اختصاص دادین...
ممنون و سپاسگزارم ازتون...





پاسخ با نقل قول
