[java] 비 활동에서 startActivityForResult 사용

활동 인 MainActivity와 다른 클래스 (간단한 Java 클래스)가 있습니다. “SimpleClass”라고 부릅니다. 이제 해당 클래스에서 startActivityForResult 명령을 실행하고 싶습니다.

이제 그 클래스 (SimpleClass)를 전달할 수 있지만 MainActivity의 컨텍스트 만 전달할 수 있지만 문제는 context.startActivityForResult (…);

그래서 SimpleClass를 만드는 유일한 방법은 ‘startActivityForResult; MainActivity의 참조를 Activity 변수로 SimpleClass에 다음과 같이 전달하는 것입니다.

MainActivity 클래스 내부에서 다음과 같이 SimpleClass의 인스턴스를 만듭니다.

SimpleClass simpleClass=new SimpleClass(MainActivity.this);

이제 이것은 SimpleClass의 모습입니다.

public Class SimpleClass {

Activity myMainActivity;

   public SimpleClass(Activity mainActivity) {
       super();
       this.myMainActivity=mainActivity;
   }
....


    public void someMethod(...) {
        myMainActivity.startActivityForResult(...);
    }

}

이제 작동하지만 올바른 방법이 아닙니까? 나는 미래에 약간의 메모리 누수가있을 수 있다는 것이 두렵다.

감사. 레이.



답변

이것이 좋은 습관인지 아닌지는 모르겠지만 casting a Context object to an Activity object잘 컴파일됩니다.

이 시도:

if (mContext instanceof Activity) {
        ((Activity) mContext).startActivityForResult(...);
} else {
        Log.e("mContext should be an instanceof Activity.");
}

이것은 컴파일되어야하고 결과는 컨텍스트를 보유한 실제 활동에 전달되어야합니다.


답변

이전 활동에서 결과를 가져와야하는 경우 호출 클래스는 활동 유형이어야합니다.

Activity.startActivityForResult()결과를 사용하지 않는 경우 전화를 거는 목적은 무엇입니까 (적어도 게시 한 샘플 코드에 따라).

않는 myMainActivity결과에 아무것도 할? 그렇다면 SimpleClassActivity의 하위 클래스를 만들고 결과를 SimpleClass자체적으로 처리하십시오 . 결과가 필요한
경우 myMainActivity에서 활동을 시작하도록 코드를 리팩터링해야 할 수 있습니다 myMainActivity.


답변

더 나은 솔루션은 다음과 같습니다.

  1. 만들기 SimpleClass당신의 서브 Activity클래스
  2. 다른 활동을 다음과 같이 호출 startActivityForResult
  3. SimpleClass그 자체로 결과 처리


답변