سوال در مورد متد onBackPressed در هر فرگمنت
سلام من 5 تا فرگمنت فعال داخل bottom navigation view دارم که با جابه جایی بینشون از بین نمیرن یعنی یکیشون show بقیشون hide میشن.حالا میخوام برای هر کدوم از اینا متد on backpressed به صورت جداگانه تعریف کنم.یعنی وقتی کلید بک میزنم بفهمه تو کدوم فرگمنته و یه کار خاصی رو انجام بده کاری هم که میخوام انجام بده این کدیه که پایین گذاشتم میخوام این کد واسه هر فرگمنت جدا اجرا بشه نمیخوام استک بقیه فرگمنتا رو حذف کنم.فقط استک فرگمنتی که show هستش حذف بشه .بزار یه مثال بزنم من تو فرگمنت شماره یک چهارتا استک دارم.حالا با کلیک کردن روی باتوم نویگیشن میرم فرگمنت اصلی شماره دو باز ممکنه تو اینم دو تا استک باشه.نمیخوام مثلا وقتی تو فرگمنت شماره یک هستم کلید بک میزنم استک فرگمنتشماره دو از بین بره.چیزی که گفتم شبیه این عکسه.
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count == 0) {
super.onBackPressed();
} else {
int index = ((getSupportFragmentManager().getBackStackEntryCount()) -1);
getSupportFragmentManager().popBackStack();
FragmentManager.BackStackEntry backEntry = getSupportFragmentManager().getBackStackEntryAt(index);
int stackId = backEntry.getId();
BottomNavigationView1.getMenu().getItem(stackId).setChecked(true);
}
راهی که به نظر من میرسه اینه که فرگمنتی که الان در حال نمایشه رو شناسایی کنید و بعد با توجه به اون، یه دستور کلی برای onBackPress داخلی اکتیویتی بنویسد که با توجه به فرگمنتی در حال نمایش، دستور مورد نظر برای اون فرگمنت اجرا میشه. پایین راه شناسایی فرگمن در حال نمایش رو نوشتم (باید توی هر فرگمنت این دستور رو بنویسید).
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
//Toast.makeText(G.getContext(), "Visible", Toast.LENGTH_SHORT).show();
}
else {
//Toast.makeText(G.getContext(), "Invisible", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onBackPressed() {
//گرفتن تعداد فرگمنت های باز
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count == 0) {
//چیزی باز نیست
} else {
//برو به فرگمنت قبلی
getSupportFragmentManager().popBackStack();
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .