찾다

 >  Q&A  >  본문

android - onActivityResult为什么不执行?

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();
天蓬老师天蓬老师2771일 전501

모든 응답(4)나는 대답할 것이다

  • 天蓬老师

    天蓬老师2017-04-17 17:31:24

    의도에 오류가 있을 수 있습니다. 새로운 인텐트(XXX.this,LoreAddActivity.class)를 사용해 보세요.

    getApplication()은 Application 개체를 참조하지만
    Application 클래스는 Context 클래스를 확장하므로
    애플리케이션 컨텍스트를 제공하는 데 사용할 수 있습니다.

    getApplication이 반환한 애플리케이션 객체도 컨텍스트를 상속하므로 이렇게 사용할 수 있습니다. 그러나 소스가 명시적으로 지정되지 않으면 콜백, 즉 setResult를 수신할 때 B는 인텐트가 어디에서 왔는지 알 수 없습니다. 위 내용은 제가 이해한 내용이며 참고용일 뿐입니다. 오류가 있는 경우 지적해 주시기 바랍니다

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:31:24

    Activity A가 반환되는 한 onActivityResult가 실행됩니다. 로그 또는 디버그를 사용하여 onActivityResult가 실행되지 않은 위치를 확인할 수 있습니다

    회신하다
    0
  • PHPz

    PHPz2017-04-17 17:31:24

    두 활동에 어떤 시작 모드를 설정하셨나요?

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 17:31:24

    으아아아

    이 문장은 getApplication을 사용합니다. Activity는 기본적으로 표준 모드에서 시작됩니다. 이 모드에서 시작된 Activity는 기본적으로 해당 Activity를 시작한 Activity의 작업 스택에 들어갑니다. 따라서 Activity를 시작할 때 getApplication을 사용하지 않고 이를 Activity의 Context로 바꾸는 것이 가장 좋습니다.

    회신하다
    0
  • 취소회신하다