سلام
من اصلا نفهمیدم که متد
public void onAttach(@NonNull Context context) { super.onAttach(context); eventListener = (MydialogEventListener) context; }
چه کاری رو انجام میده ؟
سلام رضا جان
این متد وقتی فرگمنت به اکتیویتی متصل شد صدا زده میشه
به عبارتی این متد در چرخه فرگمنت ها هستش و در چرخه حیات اکتیویتی حضور نداره.
و ما در اون اینترفیسمونو مقداردهی کردیم با context و سپس کست کردیم(عمل پولیمورفیسم).
در چرخه حیات (Life Cycle) فرگمنت، متدی هست به اسم onAttach، این متد زمانی صدا زده می شه که فرگمنت به اکتیویتی متصل بشه، از طرف دیگه این متد پارامتری داره که در واقع Context همون اکتیویتی هست که به فرگمنت متصل شده. حالا اگر ما اینترفیس رو توسط اکتیویتی implement کرده باشیم، می تونیم داخل متد onAttach بگیم پارامتر Context همون interface ما هست که implement شده (بر اساس قاعده Polymorphism).
درود وقت بخیر
با تعاریف شما در بالا
1.
آیا میشه بجای کد زیر :
eventListener= (MyDialogeventListener) context;
نوشت:
eventListener= new MainActivity();
چون من اینکارو کردم و کامپایلر اروری نداد.
2.
اگر context همون روت لی اوت اکتیوتی ماست دیگه چه نیازی به Cast کردنش داریم چون اونطرف MainActivity اینترفیس MyDialogeventListener رو پیاده سازی کرده بنابراین کامپایلر باید بتونه اتوماتیک با مقداردهی کردن eventListener با نمونه context متوجه بشه که این context همون نمونه MainActivity هست.
ممنون