অ্যালেক্স ভলভয়ের উত্তরটি আরও কিছু বিশদভাবে বর্ণনা করা -
আপনি যদি টুকরো টুকরো করে এই সমস্যাটি পেয়ে থাকেন তবে getActivity () প্রসঙ্গটি পেতে সঠিক কাজ করে
অন্যান্য ক্ষেত্রে:
আপনি যদি ব্যবহার করতে না চান-
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
তারপরে আপনার আউটসাইডক্লাসে এর মতো একটি ফাংশন তৈরি করুন -
public void gettingContext(Context context){
real_context = context;//where real_context is a global variable of type Context
}
এখন, আপনার মূল ক্রিয়াকলাপে আপনি যখনই কোনও নতুন আউটসাইডক্লাস করেন তখনই আপনি আউটসাইডক্লাসটিকে সংজ্ঞা হিসাবে কার্যকলাপের প্রসঙ্গটি প্রদান করার পরে উপরের পদ্ধতিটিকে কল করুন। এছাড়াও আপনার মূল ক্রিয়াকলাপে একটি ফাংশন করুন-
public void startNewActivity(final String activity_to_start) {
if(activity_to_start.equals("ACTIVITY_KEY"));
//ACTIVITY_KEY-is a custom key,just to
//differentiate different activities
Intent i = new Intent(MainActivity.this, ActivityToStartName.class);
activity_context.startActivity(i);
}//you can make a if-else ladder or use switch-case
এখন আপনার আউটসাইডক্লাসে ফিরে আসুন এবং নতুন ক্রিয়াকলাপ শুরু করার জন্য এই জাতীয় কিছু করুন-
@Override
public void onClick(View v) {
........
case R.id.any_button:
MainActivity mainAct = (MainActivity) real_context;
mainAct.startNewActivity("ACTIVITY_KEY");
break;
}
........
}
এইভাবে আপনি পতাকাগুলির সাথে গোলযোগ না করে বিভিন্ন আউটসাইডক্লাস থেকে কল করা বিভিন্ন ক্রিয়াকলাপ শুরু করতে সক্ষম হবেন।
দ্রষ্টব্য - প্রবন্ধের জন্য কনস্ট্রাক্টরের মাধ্যমে প্রাসঙ্গিক বস্তুটি ক্যাশে না করার চেষ্টা করুন (অ্যাডাপ্টারের সাথে, এটির সূক্ষ্ম) A একটি খণ্ডে একটি খালি কনস্ট্রাক্টর থাকা উচিত অন্যথায় কিছু পরিস্থিতিতে অ্যাপ্লিকেশন ক্রাশ হয়।
কল করতে মনে আছে
OutsideClass.gettingContext(Context context);
onResume () ফাংশনেও।