활동 인 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
결과에 아무것도 할? 그렇다면 SimpleClass
Activity의 하위 클래스를 만들고 결과를 SimpleClass
자체적으로 처리하십시오 . 결과가 필요한
경우 myMainActivity
에서 활동을 시작하도록 코드를 리팩터링해야 할 수 있습니다 myMainActivity
.
답변
더 나은 솔루션은 다음과 같습니다.
- 만들기
SimpleClass
당신의 서브Activity
클래스 - 다른 활동을 다음과 같이 호출
startActivityForResult
SimpleClass
그 자체로 결과 처리