Group Class의 구조는 ActivityGroup 사용
public class Group extends ActivityGroup{
private ArrayList<String> ActList;
private LocalActivityManager manager;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent A = new Intent(Group.this, A.class);
startChildActivity("A", A); -> ActList에 id 추가, Activity Start
}
위와 같이 ActivityGroup를 상속받은 Group라는 클래스에서 A라는 Activity를 최초
시작하고 Activity를 LocalActivityManager를 통해 manager.startActivity , manager.destroyActivity,
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)을 이용하여 관리하는 구조입니다.
Group -> A -> B -> C -> 카메라 또는 겔러리
이런 형식으로 이어집니다.
C Activity 에서
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
// 임시로 사용할 파일의 경로를 생성
String url = "tmp_" + String.valueOf(System.currentTimeMillis()) + ".jpg";
imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), url));
cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri);
// ActivityGroup을 사용하므로 부모 그룹으로 결과값을 넘김
Group parent = (Group)C.this.getParent();
parent.startActivityForResult(intent, Const.CAPTURE_IMAGE_CALLBACK);
위와 같이 사진 켑쳐한 값이나 겔러리에서 선택한 값을 부모 클래스에 startActivityForResult 로 결과 값을 넘깁니다.
Group 에서는
// 호출된 Activity 로 부터 값을 받아와 처리하는 메소드
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
C subActivity = (C)manager.getCurrentActivity();
subActivity.handleActivityResult(requestCode, resultCode, data);
}
}
결과 값을 받아 C Activity의 handleActivityResult 로 값을 다시 넘겨 받아
이미지를 서버에 전송하는 구조로 되어 있습니다.
처음에는 별다를 문제 없이
Activty 도 관리가 되어 순차적으로 이동 되며 결과 값도 정상적으로 C Actvity로 넘겨 줍니다.
서버에 이미지 전송도 원활하게 됩니다. ( Activity List 값 A -> B -> C )
그런데 어느 순간에 Group에서 C로 값을 전달하는 부분에서 ClassCastException 이 발생합니다.
// 호출된 Activity 로 부터 값을 받아와 처리하는 메소드
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
C subActivity = (C)manager.getCurrentActivity();
subActivity.handleActivityResult(requestCode, resultCode, data);
}
}
로그를 통해서 확인 햇을때
정상적으로 동작할때는 manager.getCurrentActivity(); 가 C Activity로 나오는데
어느 순간에 Group의 onCreate()메소드가 호출 되면서 manager.getCurrentActivity(); 가 A Activity로
되어 버려 ClassCastException 이 발생합니다.
어느 부분이 문제인지.. 알수가 없습니다. ㅜㅜ
getCurrentActivity() 의 값이 정상적으로 C Activity 로 계속 나오면 되는데... ㅡㅡ;
특정 시점에서 Group onCreate() 를 호출해서 getCurrentActivity()값이 A Activity가 나오는
것만 바로 잡으면 될것 같은데 잘 되지가 않습니다.
해결 방법을 좀 공유해 보고자 글을 올립니다. ^^