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

مدیریت backstack فرگمنت در تب ها (Bottom Navigation)

mohsen.talk  6 سال پیش  6 سال پیش
0 0

سلام

من توی برنامم از Bottom Navigation ُاستفاده میکنم و هر باتم نویگیشن یک فرگمنت داره و هر فرگمنت با دکمه به فرگمنت های دیگر توی همون تب میرن

مشکل اینجاست که فرض کنید من تب "خانه" دارم که فرگمنت "خانه"رو نمایش میده و توش دکمه "نمایش اطلاعات محصول" که با کلیک کردن به فرگمنت "اطلاعات محصول" وارد میشه .یک تب دیگه هم وجود داره به اسم "بیشتر" که فرگمنت بیشتر رو نشون میده و که توش دکمه "تنظیمات" هست و به فرگمنت "تنظیمات" میره.

حالا فرض کنید من الان توی تب "خانه" دکمه "نمایش اطلاعات محصول رو میزنم" تب رو عوض میکنم به "بیشتر" و دکمه تنظیمات رو میزنم. حالا میرم به تب "خانه" و بک میزنم! نکته جالب اینجاست که اگر دکمه بک کار بکنه فرگمنت "تنظیمات" رو میبنده و با دوباره کلیک کردن فرگمنت "اطلاعات محصول"!

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

میتونین نمونه مشابهش رو توی اپلیکیشن بازار ببینید که از Bottom Navigation استفاده کرده.

0 0
سلام منم دقیقا همین مشکل رو دارم و تاحالا نتونستم رفع کنم، ممنون میشم یکی راهنمایی بکنه! (6 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
ahmadHaeri  6 سال پیش
0 0

سلام دوست عزیز ، شما یک بخش برای مشخص کردن فرگمنت دارید که با سوییچ تصمیم میگیرید که کدام فرگمنت انتخاب بشه ، اگر اشتباه نکنم یه چنین چیزی  : 

  switch (position) {

case 0:
fragment = new FragmentMarket();
break;
case 1:
fragment = new FragmentBag();
break;
case 2:
fragment = new FragmentHistory();
break;
case 3:
fragment = new FragmentSupport();
break;
default: {
fragment = new FragmentMarket();
break;
}


final FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.content, fragment).commit();

توی این کد شما دارید جای یه فرگمنت رو با فرگمنت دیگه ای عوض میکنید ! 

برای اینکه این مشکل پیش نیاد باید از قبل یک نمونه از فرگمنت خودتون درست کنید : 

FragmentSupport fragmentSupport = new FragmentSupport();
FragmentBag fragmentBag = new FragmentBag();
FragmentMarket fragmentMarket = new FragmentMarket();

حالا زمان تصمیم گیری با کد زیر فرگمنتی رو که میخواین نمایش میدین و بقیه فرگمنت ها رو مخفی میکنید ، با این کار ، فرگمنت از بین نمیره ! 

 
getFragmentManager()
.beginTransaction()
.add(R.id.fragmentParentViewGroup, fragmentSupport)
.add(R.id.fragmentParentViewGroup, fragmentBag)
.add(R.id.fragmentParentViewGroup, fragmentMarket)
.commit();


// تصمیم گیری برای نمایش فرگمنت مورد نظر

getFragmentManager().beginTransaction()
.hide(fragmentSupport)
.hide(fragmentBag)
.show(fragmentMarket)
.commit();

فقط توی این روش باید توجه داشته باشید که استفاده از حافظه هیپ بالا میره ! و باید حافظه رو مدیریت کنید

 


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