بک استک فرگمنت
يكشنبه, ۲۵ آبان ۱۳۹۹، ۱۰:۵۲ ق.ظ
در حالت پیش فرض بک استک فقط برای اکتیویتی وجود داره و فرگمنتها بک استک ندارن. برای استفاده از بک استک فرگمنت باید اون رو توی کد فعال کنیم.
نکته مهم: بک استک فرگمنت در واقع استکی از transitionها است و نه فرگمنت ها!
هر یک از عملیات های add، remove و replace در استک ذخیره می شود.
نکته مهم دیگه اینه که برای هر کامیت باید یک transition فراخونی بشه در غیر این صورت اپ کرش میکنه.
کد زیر اضافه کردن یک فرگمنت به استک را نشان می دهد:
private void changeFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager
.beginTransaction()
.replace(R.id.frag_container, fragment)
.addToBackStack(null)
.commit();
}
حذف transition (فرگمنت) از استک توسط
getSupportFragmentManager().popBackStack();
انجام میگردد. این دستور برعکس replace عمل میکند. یعنی فرگمنت فعلی را پرانده و فرگمنت قبلی را جایگزین میکند.
برای اینکه بدونیم هر لحظه چه تعداد transition در استک وجود دارد، از دستور
fragmentManager.getBackStackEntryCount();
استفاده میکنیم.
برای اینکه جواب درست تری بگیریم، این دستور در لیسنر زیر به کار گرفته میشود:
fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
Log.i(TAG, "BackStackEntryCount: " + fragmentManager.getBackStackEntryCount());
}
});
۹۹/۰۸/۲۵