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가 나오는

 

것만 바로 잡으면 될것 같은데 잘 되지가 않습니다.

 

해결 방법을 좀 공유해 보고자 글을 올립니다. ^^