비 활동에서 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.