Activity A:
int tag = 0;
startActivityForResult(new Intent(getApplication(), LoreAddActivity.class).putExtra("tag1", tag), 100);
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
super.onActivityResult(arg0, arg1, arg2);
if(arg1==RESULT_OK){
switch (arg0) {
case 100:
tag2 = arg2.getIntExtra("tag2", 0);
break;
default:
break;
}
}
}
Activity B:
int tag = getIntent().getIntExtra("tag1",0);
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putInt("tag2", tag);
intent.putExtras(bundle);
setResult(RESULT_OK, intent);
finish();
天蓬老师2017-04-17 17:31:24
의도에 오류가 있을 수 있습니다. 새로운 인텐트(XXX.this,LoreAddActivity.class)를 사용해 보세요.
getApplication()은 Application 개체를 참조하지만
Application 클래스는 Context 클래스를 확장하므로
애플리케이션 컨텍스트를 제공하는 데 사용할 수 있습니다.
getApplication이 반환한 애플리케이션 객체도 컨텍스트를 상속하므로 이렇게 사용할 수 있습니다. 그러나 소스가 명시적으로 지정되지 않으면 콜백, 즉 setResult를 수신할 때 B는 인텐트가 어디에서 왔는지 알 수 없습니다. 위 내용은 제가 이해한 내용이며 참고용일 뿐입니다. 오류가 있는 경우 지적해 주시기 바랍니다
巴扎黑2017-04-17 17:31:24
Activity A가 반환되는 한 onActivityResult가 실행됩니다. 로그 또는 디버그를 사용하여 onActivityResult가 실행되지 않은 위치를 확인할 수 있습니다
黄舟2017-04-17 17:31:24
으아아아
이 문장은 getApplication을 사용합니다. Activity는 기본적으로 표준 모드에서 시작됩니다. 이 모드에서 시작된 Activity는 기본적으로 해당 Activity를 시작한 Activity의 작업 스택에 들어갑니다. 따라서 Activity를 시작할 때 getApplication을 사용하지 않고 이를 Activity의 Context로 바꾸는 것이 가장 좋습니다.