آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

متد popBackStack جهت پاک کردن استک

يكشنبه, ۲۵ آبان ۱۳۹۹، ۱۲:۵۲ ب.ظ

متد popBackStack اوور لودهای زیر را دارد:

 

popBackStack(int, int)

popBackStack(String, int)

آرگومان اول بصورت int اندیس مورد نظر برای استک را میگیرد. مثلا اگر فرگمنت ها این ترتیب را داشته باشند:

A > B > C

و این متد به صورت زیر فراخوانی شود:

 

 

popBackStack(0, 0);

فرگمنت A نمایش داده خواهد شد.

 

آرگومان اول بصورت String اسم استک را میگیرد. یعنی وقتی که transition رو در استک سیو میکنیم یک اسم به آن اختصاص داده میشود. به این صورت:

 

fragmentManager
        .beginTransaction()
        .replace(R.id.frag_container, fragmentOne)
        .addToBackStack("salam")
        .commit();
getSupportFragmentManager().popBackStack("salam",0);

در این صورت پس از پاپ کردن، fragmentOne نمایش داده خواهد شد.

 

آرگومان دوم در هر دو یک فلگ است که مقدار آن صفر یا یک می باشد.

 

FragmentManager.POP_BACK_STACK_INCLUSIVE این همون یک هست

مقداری برای صفر تعریف نشده ولی EXCLUSIVE هست.

 

تفاوت INCLUSIVE و EXCLUSIVE:

 

getSupportFragmentManager().popBackStack("frag two",0); // POP_BACK_STACK_EXCLUSIVE
getSupportFragmentManager().popBackStack("frag two",1); // POP_BACK_STACK_INCLUSIVE

 

در INCLUSIVE فرگمنت مقصد یا destination (در اینجا یعنی frag two) هم میپره و به فرگمنت قبل از فرگمنت مقصد میره. (اگر فرگمنتی قبلش نبود کلا هیچی نشون داده نمیشه دیگه)

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

 

نکته شاید جالب: کد

getSupportFragmentManager().popBackStack(null,0); // POP_BACK_STACK_EXCLUSIVE

مثل

getSupportFragmentManager().popBackStack();

 

عمل میکنه. یعنی فرگمنت ها رو دونه دونه pop میکنه.

 

برای پاک کردن کل استک دو روش وجود دارد:

 

روش اول:

 

FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
    fm.popBackStack();
}

 

روش دوم:

 

fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

 

به جای popBackStack میشه از popBackStackImmediate نیز استفاده کرد. گویا دومی زودتر به جواب میرسه ولی اولی نسبت به بقیه کد آسنکرون هست و توی لوپ و در ترد اصلی اجرا میشه.

اینجا

موافقین ۰ مخالفین ۰ ۹۹/۰۸/۲۵
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی