2014-11-13 5 views
1

기본적으로 : 활동 A는 활동 B를 시작하는 startActivityForResult를 호출합니다.이 시점에서 활동 B는 활동 A의 onActivityResult 메소드를 다시 호출해야합니다. 대신, Activity B 은 Activity C의 onActivityResult 메소드를 다시 호출합니다. Activity B.getCallingActivity()는 예상대로 Activity A를 반환합니다. 보다 상세onActivityResult 잘못된 활동이 호출되고 있습니다.

:

  • EditModuleActivity (활동 A)

  • EditMotorActivity (활동 B)

  • ConfigurationActivity (활동 C :

    I 세 활동이)

  • 012 EditModuleActivity (활동 A)의 내부

3,516,,이 코드가 있습니다

private void doThisThing(Object item){ 
    // blah blah build intent 
    DbgLog.error("calling activity: " + getCallingActivity().toString()); // this prints out Activity A, which is what I expect. 
    returnIntent.putExtra(EDIT_MOTOR_CONTROLLER, item); 
    setResult(RESULT_OK, returnIntent); 
    finish(); 
} 

ConfigurationActivity (활동 C) : EditMotorActivity (활동 B)의 내부

private void launchIntentFromHere(){ 
    int requestCode = 101; 
    Intent editMotorIntent = new Intent(context, EditMotorActivity.class);  
    editMotorIntent.putExtra(EditMotorActivity.EDIT_MOTOR_CONTROLLER, item); 
    editMotorIntent.putExtra("requestCode", requestCode); 
    setResult(RESULT_OK, editMotorIntent); 
    startActivityForResult(editMotorIntent, requestCode); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    DbgLog.error("*************************** why is this never getting called?"); 
} 

을,이 코드가 그것을 가지고있다 :

private void launchIntent(Object item){ 
    Intent editMotorIntent = new Intent(context, EditMotorActivity.class); 
    editMotorIntent.putExtra(EditMotorActivity.EDIT_MOTOR_CONTROLLER, item); 
    setResult(RESULT_OK, editMotorIntent); 
    startActivityForResult(editMotorIntent, 1); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // deals properly with the results 
} 

내가 EditModuleActivity에있을 때 내가 EditMotorActivity를 시작하면 ConfigurationActivity.onActivityResult가이됩니다. 대신, 내가 EditModuleActivity에있을 때 EditMotorActivity를 시작하면 EditModuleActivity.onActivityResult가 호출되어야하지만 그럴 수 없습니다.

질문

  • 왜 잘못된 onActivityResult를 호출지고 ??

  • 올바른 onActivityResult를 어떻게 호출합니까? 내 기대가 잘못 되었습니까? 이게 어떻게 다른가?

  • 잘못된 전화가 걸려 오면 올바른 전화를하는 방법은 무엇입니까?

답변 나는 내 코드는 여기 허용 대답과 동일

  • 도움이되지 않았다 본 적이 : onActivityResult() not being called in activity

  • 난에 android:launchMode="singleInstance"이없는 내 매니페스트

  • 나는 "조각"이 무엇인지 모르지만 나는 그것이 있다고 생각하지 않습니다.

  • 이 질문에서와 같이 하나의 활동에서 두 개의 다른 활동을 호출하지 않습니다. Handling onActivityResult in Android app having more than one activity 대신 두 개의 다른 활동에서 동일한 활동을 호출합니다.

  • 여기에 "A 클래스에서 B 액티비티를 호출하면 항상 A 클래스로 코드가 반환됩니다. C에서 D를 호출하면 동일합니다." 하지만 B 액에서 B 액을 불러오고 C 액티비티로 돌아갑니다. 왜? 이처럼 WRONG onActivityResult() being called

:

B 
/\ 
A C 

하지 않음이 :

X Z 
\/
    Y 
+1

1) 다시 라벨을 붙이면 도움이됩니다. "A call B call C"주문의 활동 - "C call calls C"가 혼란스러운 것처럼 들리네. 2) "class A에서 Activity B로 전화하면"어떤 의미인지 명확히 할 수 있다면, "클래스 A"또는 "활동 A"입니까? - 활동이 아닌 활동에 대한 "클래스"호출이 이상하고 결과를 설명 할 수 있고 3) 실제 코드를 게시해야합니다. 정확한 표현이라고 생각 되더라도 어쩔 수없는 버그가 있습니다 ... 아마 관련없는 라인을 삭제할 수도 있지만 여전히 ... – Jim

+0

응답 해 주셔서 감사합니다! 1. 나는 재명 표했다. B는 C를 호출하지 않으며 A는 B를 호출하고 C는 B를 호출하지만 B는 C를 호출하지 않습니다. 2. 명확화 - 다른 활동을 호출하는 모든 활동입니다. 삼.나는 원래 코드를 게시 할 수 없다 : (대부분은 누군가가 내게 무슨 일이 일어 났는지에 대한 나의 이해가 정확하다는 것을 확인할 수 있기를 바라고있다.) – nemicolopterus

+0

컨텍스트를 초기화하는 방법 – Nepster

답변

2

나는이 같은 이동 중지 방법을 무시했다 ... 당신은 여전히 ​​드문 경우 이상한 결과를 얻는 경우 onNewIntent 조회 할 수 있습니다 : 기본적으로

@Override 
public void onStop(){ 
    setResult(RESULT_CANCELED, new Intent()); 
    finish(); 
} 

을 나는 방법을 이해하지 않았다 Android 라이프 사이클이 작동했습니다. 나는 onStop()이 Activity가 Kill 된 경우에만 호출 될 것이라고 생각했고, 다른 Activity로부터 응답을 기다리고 있다면 kill되지 않을 것이라고 생각했습니다.

무슨 일이 일어 났습니까? 활동 C가 활동 B를 시작했습니다. 활동 B가 시작되면 A.onStop()이 호출되었습니다. 그런 다음 B 액티비티가 완료되면 액티비티 A로 돌아가려고했으나 액티비티 A가 이미 중지되었으므로 C 액티비티로 다시 돌아 왔습니다.

1

OK - 잘못된 "컨텍스트"또는 활동에 대한 정적 참조에 대한 참조가 대부분이나 코드에서 다른 곳의 이상한 점. - 당신이 가능하다면 ... 더 많은 코드를 게시해야하는 이유

  1. 귀하의 코드가 설명하지 않습니다

    직접 질문 (들)에 응답합니다.

  2. 귀하의 기대가 맞습니다. 어떻게하면 startActivityForResult이 작동하는지 명확히 이해하는 것 같습니다. 귀하의 참고 문헌은 또한 귀하가하는 일을 알고 있음을 보여줍니다. 다른 방법으로는 작동하지 않지만 오류가 없다는 의미는 아닙니다 (위의 "1"참조)

  3. 무엇이 잘못되었는지 알아낼 수 없다면 명시 적으로 원하는 활동 (startActivity)을 원하는 의도를 전달한 다음 해당 의도를 처리 할 때 항상 호출 할 수 있습니다. 당신은

+0

정말 고마워요! 나에게 적어도 세 가지 확실한 새로운 사항을 생각해 보도록하겠습니다. 문제점을 분리하고 나중에 모든 코드를 게시하기 위해 간소화 된 버전의 문제를 작성하겠습니다. – nemicolopterus

+0

Ok ... 관련 코드를 빼고 미니를 다시 작성했습니다. 이 버전의이 버전이 사용되었지만 그 버전은 작동했습니다. 그래서 나는 수 많은 인쇄물을 추가하고 하루 만에 머리카락을 찢어서 갑자기 작동하기 시작했습니다. 작업을 시작한 후에는 파고 들어야 할 시간이 없었습니다. 100 % 확신 할 수는 없지만, 문제를 발견했다는 것을 알았습니다. (나 자신의 답을 받아 들였습니다. 조금씩 나쁜 느낌이 들더라도 ...). 당신의 모든 도움에 다시 한번 감사드립니다! – nemicolopterus

관련 문제