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

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

omidronaldoo  4 سال پیش  4 سال پیش
0 0

سلام من 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);
}
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
116236  4 سال پیش
+1 0

راهی که به نظر من میرسه اینه که فرگمنتی که الان در حال نمایشه رو شناسایی کنید و بعد با توجه به اون، یه دستور کلی برای 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();

                }
              }
پاسخ به سوال 
Motamed  4 سال پیش
+2 0

@Override
public void onBackPressed() {
//گرفتن تعداد فرگمنت های باز
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count == 0) {
//چیزی باز نیست
} else {
//برو به فرگمنت قبلی
getSupportFragmentManager().popBackStack();
}
}
+1 0
خیلی ممنون از اینکه جواب دادین.مشکل من حل شده.من این کد رو اومدم خیلی جزئی ترش کردم.اومد هر فرگمنتی که فعال هستش رو تعداد فرگمنت های زیر مجموعش رو شمردم و اگه باشه به فرگمنت قبلی همون میره و کاری به فرگمنت های قبلی نداره.بزودی کدش رومیزارم اسنیپ چون میدونم خیلی کاربردیه و ممکنه لازمتون بشه.یه جورایی on back رو طراحی کردم انگار تو خود فرگمنت نوشته شده که چی کار کنه.با ای نمتدی که نوشتم میتونید تو هر پوزیشنی یه دستور خاص بنویسید و دیگه راحت میتونید باهاش کار کنید. (4 سال پیش)

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