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

سوال در مورد مدیریت فرگمنت ها

Plumber  9 سال پیش  8 سال پیش
0 0

سلام دوستان عزیز

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

برای مثال در نرم افزار بازار وقتی شما از تب دسته بندی وارد توضیحات نرم افزار میشید ، با عوض کردن تب به جستجو یا ... به اون تب میرید ولی وقتی دوباره برمیگردید به دسته بندی اونجا دوباره داره توضیحات نرم افزار رو نشون میده(یعنی در واقع تا جایی که پیش رفته رو نشون میده) میخواستم بدونم چنین کاری رو چطوری میتونم انجام بدم.

ممنون میشم راهنمایی کنید.

0 0
برای فرگمت ها رفتاری شبیه اکتیویتی ها درست کرده. و برای صفحه اول زیر تمامی فرگمت ها قسمت پایینی (Navigation) رو کپی کردن. (9 سال پیش)
0 0
متوجه نشدم میشه بیشتر توضیح بدید؟:| (9 سال پیش)
0 0
دوستان کسی راه حلی نداره؟لینکی ؟پروژه گیتهابی ؟! (9 سال پیش)
0 0
شما از ViewPager استفاده می کنید؟ (9 سال پیش)
0 0
نه به صورت معمولی وقتی روی تب های کلیک میشه فرگمنت ها باز میشن و ریپلیس (8 سال پیش)
+1 0
بازار که مثال زدید از ViewPager استفاده میکنه، شما هم همین کار رو بکنید، یا وقتی Fragment ساخته شد در متغیری ذخیره کنید که دفعات بعد هم بتونید استفاده کنید و هر بار new نکنید. (8 سال پیش)
0 0
خب ویوپیجر یعنی خودش هندل میکنه چنین چیزی رو؟! و اینکه تو چی ذخیره کنم؟توی Fragment؟ خب چطوری کاری کنم دوباره new نشه؟! (8 سال پیش)
0 0
بله شما از FragmentPagerAdapter استفاده کنید، از اون یکی راه حلی که گفتم چشم پوشی کنید فعلا. (8 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
حمید  8 سال پیش
+1 0

سلام. دقت کنید که شما برای نمایش فرگمنتها و اینکه اونا دوباره ساخته نشند ، نباید اونا رو کامل از پشته رم پاک کنید و دوباره بسازیدشون، برای اینکار فقط کافیه حالت visibility اونها رو تغییر بدید ، برای اینکار میتونید از تابع زیر استفاده کنید:

public void showFragment(Fragment fragment, List<Fragment> mustHideFragments){
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
if(fragment.isAdded()){
fragmentTransaction.show(fragment);
} else{
fragmentTransaction.add(R.id.frmHolder, fragment, fragment.getClass().getName());
}
for(Fragment otherFragment : mustHideFragments){
if(otherFragment.isAdded())
fragmentTransaction.hide(otherFragment);

}
fragmentTransaction.commit();
}

دقت کنید ورودی اول فرگمنتی هست که شما میخوایید نمایش بدید ، و ورودی دوم لیست فرگمنتهایی هست که نباید نمایش داده بشند.  اگر مایل به مطالعه بیشتر هستید اینجا رو مطالعه بفرمایید.

0 0
ممنون ولی روش پیشنهادی شما فقط ماله زمانیه که کاربر بین چند تب جابه جا بشه ولی من میخوام به صورتی باشه که وقتی کاربر از داخل هر تب به صفحه دیگه ای رفت و تب رو عوض کن و برگشت توی همون صفحه باشه! در واقع مثلا کاربر از تب محصولات وارد محصول یک شده و از تب جستجو وارد محصول پنج شده، حالا وقتی کاربر بین بت های جست جو و محصولات جاله جا میشه میخوام همون استیت محصول 1 و 5 باشه نه اینکه دوباره محصولات و صفحه جستجو رو بیاره! (8 سال پیش)
0 0
دقیقا متوجه نشدم چی گفتید و منظورتون چیه ، اگر یک مثال واضح تر بزنید میتونم کمکتون کنم. (8 سال پیش)
0 0
ببینید دوست عزیز مثلا شما در نرم افزار بازار یا کلی نرم افزار دیگه چند تب وجود داره ، مثلا یکی از تب ها محصولات پرفروش و دیگری دسته بندی هست، حالا یوزر از داخل تب محصولات پرفروش وارد یکی از محصولات میشه تا جزییات رو ببینه ، بعد در همین حین وارد تب دسته بندی میشه و داخل یکی از دسته بندی ها مثلا آموزشی میشه و وقتی دوباره از تب دسته بندی به تب پرفروش برمیگرده استیت اون تب باقی مونده و در واقع اون محصولی که روش کلیک شده بود تا جزییاتشو ببینه همچنان هست و اگر دوباره بره به تب ئدسته بندی همچنان اون بخش آموزشی درحال نمایش هست! (8 سال پیش)
0 0
خوب اگر منظورتون اینه که فرگمنتها در استیت فعلیشون باقی بمونن این کد همینکار رو انجام میده(مثل کاری که بازار یا دیوار انجام میدن)، در غیر اینصورت باز هم متوجه منظورتون نمیشم (8 سال پیش)
پاسخ به سوال 
کوثر  8 سال پیش
0 0

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

       private SampleFragment fragmentOne;





case R.id.btnFragmentOne: {
                if (fragmentOne == null) {
                    fragmentOne = SampleFragment.newInstance(" فرگمنت شماره یک ", 0xFFE57373);
                }
                replaceFragment(this, fragmentOne, R.id.fragmentContainer, false);
            }
            break;

و در فرگمنت هم در متد onCreateView به این صورت :

   
    private View root;


@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        if (root != null) {
            return root;
        }
        root = inflater.inflate(R.layout.fragment_blank, container, false);

        return root;
    }
0 0
اینجا root چی هست؟! (8 سال پیش)
0 0
پاسخ ویرایش شد (8 سال پیش)
0 0
شما مطمينید کدتون درسته؟تقریبا هیچ کودوم از بخشارو نمیشناسه از newInstance گرفته تا نوع ریپلیس کردنتون! (8 سال پیش)
0 0
شما نمونه سورس کدی چیزی ندارید ازین مبحث؟ (8 سال پیش)
پاسخ به سوال 
Plumber  8 سال پیش
+1 0

دوستان کسی نمونه ای نداره؟سورسی یا تکه کدی چیزی که دقیقا مشابه بازار یا دیوار یا کلی برنامه دیگه که تب دارن، مدیریت فرگمنت داشته باشه؟


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