Menguraikan jawaban Alex Volovoy sedikit lagi -
jika Anda mendapatkan masalah ini dengan fragmen, getActivity () berfungsi dengan baik untuk mendapatkan konteksnya
Dalam kasus lain:
Jika Anda tidak ingin menggunakan-
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
lalu buat fungsi seperti ini di OutsideClass Anda -
public void gettingContext(Context context){
real_context = context;//where real_context is a global variable of type Context
}
Sekarang, dalam aktivitas utama Anda kapan pun Anda membuat OutsideClass baru panggil metode di atas segera setelah Anda menentukan OutsideClass yang memberikan konteks aktivitas sebagai argumen. Juga dalam aktivitas utama Anda membuat fungsi-
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
sekarang kembali ke OutsideClass Anda, dan untuk memulai aktivitas baru lakukan sesuatu seperti ini-
@Override
public void onClick(View v) {
........
case R.id.any_button:
MainActivity mainAct = (MainActivity) real_context;
mainAct.startNewActivity("ACTIVITY_KEY");
break;
}
........
}
Dengan cara ini Anda akan dapat memulai berbagai aktivitas yang dipanggil dari OutsideClass yang berbeda tanpa mengacaukan bendera.
Catatan-Usahakan untuk tidak men-cache objek konteks melalui konstruktor untuk fragmen (dengan adaptor, baik-baik saja). Sebuah fragmen harus memiliki konstruktor kosong jika tidak aplikasi crash dalam beberapa skenario.
ingatlah untuk menelepon
OutsideClass.gettingContext(Context context);
dalam fungsi onResume () juga.