비 활동에서 startActivityForResult 사용


82

활동 인 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(...);
    }

}

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

감사. 레이.


나는 당신이 무엇을하려고하는지 모르지만 당신은 이것을 읽어야 합니다 .
Macarse

1
이렇게하면 onActivityResultsimpleClass 내부 에서 메서드 를 사용할 수 있습니까? 아니면 의도하지 않았습니까? 여기에 같은 문제 ..
Vivere_FlowCoder

답변:


64

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

이 시도:

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

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


컨텍스트가 서비스에서 전달되면 어떻습니까?
Madhur Ahuja 2013 년

9
아니요, 캐스트 예외가 시작됩니다!
리사 앤

1
그것으로 얻을의 경우 상황은 필연적 예를 들어 활동 (아니다myActivity.getApplicationContext()
휴고 Gresse

목표가 메모리 누수를 피하는 것이라면 활동을 보유하는 것보다 컨텍스트를 클래스의 멤버 변수로 보유하는 것이 어떤 이점이 있습니까? 컨텍스트를 저장하면 활동을 저장하는 것과 메모리 누수가 발생할 가능성이 같지 않습니까?
stevehs17 2016

4

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

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

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


2
결과를 사용하고 있는데 다른 클래스로 분리하고 싶기 때문에 앞으로 누수를 일으키지 않고 활동 매개 변수를 비 활동 클래스에 어떻게 전달해야하는지 궁금합니다.
rayman

1
SimpleClass를 중첩 클래스로 만드는 것은 어떻습니까?
codinguser

0

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

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

3
작동해야하는 것처럼 들리지만 나는 이것을 얻었다 :java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()' on a null object reference
Boy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.