[android] onActivityResult ()가 조기에 호출되었습니다.
다음과 같이 내 작업자 활동에서 Activity
(의 하위 항목 PreferenceActivity
)을 시작합니다 .
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1458)
loadInfo();
}
void showSettingsDialog()
{
startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458);
}
MyConfigure
클래스에는 setResult()
호출 이 없습니다 . 사실, MyConfigure
클래스를 제외한 모든 코드가없는 OnCreate()
이 사용하는 기본 설정을로드 어디 addPreferencesFromResource
.
이제는 활동이 실행 된 직후 에 조기에 onActivityResult
호출됩니다 . 1.6 및 2.1 에뮬레이터와 2.1 장치에서 테스트되었습니다. 어딘가에 묻 히라 는 전화가 있습니까? 아니면이 조기 호출을 어떻게 설명 할 수 있습니까?requestCode
1458
MyConfigure
setResult()
PreferenceActivity
답변
이 문제는 시작 모드를 singleTop
다음 으로 변경하여 해결되었습니다 .
<activity
android:name=".MainActivity"
android:launchMode="singleTop">
Android에는 (활동이 계속 실행된다는 사실에도 불구하고 )로 Activity
선언 된 singleTask
( 아직 설정되지 않은) 결과를 즉시보고하는 버그 / 기능 (?)이 있습니다 . launchMode
상위 활동을에서 singleTask
로 변경하면 singleTop
모든 것이 예상대로 작동합니다. 결과는 활동이 완료된 후에 만보고됩니다. 이 동작에는 특정 설명이 있지만 (하나의 singleTask
활동 만 존재할 수 있고이를 위해 여러 명의 웨이터가 발생할 수 있음) 이것은 여전히 저에게 논리적 제한이 아닙니다.
답변
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
전화하기 전에 제거한 후 문제를 해결했습니다 fragment.startActivityForResult(intent, 0);
.
답변
내 활동에서 모든 사용자 정의 “android : launchMode”를 제거했고 모든 것이 매력처럼 작동했습니다. 안드로이드가 정확히 무엇을 이해하고 있는지 모를 때 이것을 바꾸는 것은 좋은 생각이 아닙니다. 안드로이드는 이런 식으로 약간 까다 롭습니다.
답변
의도에 Intent.FLAG_RECEIVER_FOREGROUND
플래그가 설정 되었을 때 이런 일이 발생했습니다 .
(예, 해당 플래그는 활동과 관련이 없지만 다른 문제 에 대한 샷건 솔루션의 일부로 모든 의도에 포함되었습니다 .)
답변
Mayra의 의견에서와 마찬가지로 setResult()
문제와 관련이 없습니다. 어떤 이유로 MyConfigure
클래스는 자체적으로 완료되고 발생 하면 코드를 작성한 방법이기 때문에 PreferenceActivity
결과가있을 수 있다고 가정합니다 MyConfigure
.
이것은 startActivityForResult()
…로 시작된 모든 활동을 강제로 되돌릴 때도 발생합니다 .
그래서 MyConfigure
수업이 왜 강제로 끝났 는지에 초점을 맞추는 것이 낫다고 생각합니다 .