دوره زبان تخصصی برای برنامه‌نویسان (هدیه ویژه ثبت‌نام در دوره‌های متخصص) (فرصت محدود ⏰)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ ابوالفضل رضایی
notify کردن remove شدن فرگمنت به Activity
پوریا شفیعی حل شده توسط پوریا شفیعی

سلام.. 

یه سناریو خیلی ساده داریم..

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

بهترین روش برای پیاده سازی این سناریو چی هستش؟

سلام و احترام

 

من به ترتیب مراحل رو خدمتتون مینویسم .

 

قبل هر چیز دانستیم که فرگمنت در اکتیویتی زندگی میکند پس به طور کل وقتی متد onAttach مربوط به چرخه حیات فرگمنت کال شود یعنی فرگمنت به اکتویتی متصل شده است 

مرور lifecycle fragment : (البته خلاصه)

@Override
public void onDestroy() {
    super.onDestroy();
}
@Override
public void onDetach() {
    super.onDetach();
}
@Override
public void onStop() {
    super.onStop();
}
@Override
public void onPause() {
    super.onPause();
}

 

چرا این‌ها رو گفتم به این دلیل که شما بسته به شرایطتتان مثلا اینترفیسی رو در onDetach کال کنید تا اکتیویتیتان را notify کنید 

خب حالا میریم سراغ مراحل که ذکر کردم:

۱-ساخت یک اینترفیس به عنوان callbackکه خبر remove شدن فرگمنت رو به اکتیویتی مون اطلاع بدیم بدین صورت:(شما هر طور بخاید میتونید پارامتر‌های لازم رو بهش بدید)

public interface CallBack<T> {
    void onCall(int key, T body);
}

۲- implements کردن اینترفیسی که در فرگمنت ساختیم در اکتیویتی مربوطه:

public class MyActivity extends Activity implements Callback 

۳-در فرگمنتتان:


private Callback<تایپ شما>  callback;
public void setCallBack(Callback c){
     this.callback = c;
}
 myFragment.setCallback(this)

سپس در onDetach (زمانی که فرگمنت میمیرد) که اول تاپیک مروری کردیم :

@Override
public void onDetach() {
   super.onDetach();
   if(callback !=null){
      callback.call(some key, some T type value);
    }
}

 

پس به طور کل شما میتوانید با اینترفیس به اکتیویتیتان اطلاع دهید چه زمانی Fragment مربوطه remove شده و با توجه به این اطلاع اقدام مد نظرتون رو انجام بدید 

سالم و موفق باشید

بهترین پاسخ
پوریا شفیعی ۰۳ آذر ۱۳۹۹، ۱۹:۲۵