Xây dựng câu trả lời của Alex Volovoy thêm một chút -
trong trường hợp bạn gặp vấn đề này với các đoạn, getActivity () hoạt động tốt để lấy bối cảnh
Trong các trường hợp khác:
Nếu bạn không muốn sử dụng-
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//not recommend
sau đó tạo một hàm như thế này trong InsideClass của bạn -
public void gettingContext(Context context){
real_context = context;//where real_context is a global variable of type Context
}
Bây giờ, trong hoạt động chính của bạn khi bạn thực hiện một InsideClass mới, hãy gọi phương thức trên ngay lập tức sau khi bạn xác định InsideClass đưa ra bối cảnh của hoạt động làm đối số. Ngoài ra trong hoạt động chính của bạn làm cho một chức năng-
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
bây giờ hãy quay lại InsideClass của bạn và để bắt đầu hoạt động mới, hãy làm một cái gì đó như thế này-
@Override
public void onClick(View v) {
........
case R.id.any_button:
MainActivity mainAct = (MainActivity) real_context;
mainAct.startNewActivity("ACTIVITY_KEY");
break;
}
........
}
Bằng cách này, bạn sẽ có thể bắt đầu các hoạt động khác nhau được gọi từ các lớp ngoài khác nhau mà không làm rối cờ.
Lưu ý - Cố gắng không lưu trữ đối tượng bối cảnh thông qua hàm tạo cho đoạn (với bộ điều hợp, nó ổn). Một đoạn nên có một hàm tạo trống nếu không ứng dụng gặp sự cố trong một số trường hợp.
nhớ gọi
OutsideClass.gettingContext(Context context);
trong hàm onResume () là tốt.