Android

[Android] onActivityResult

an-hayyy 2021. 3. 12. 14:24

main액티비티에서 sub액티비티를 호출하여 넘어갔다가, 다시 main 액티비티로 돌아올때 사용되는 기본 메소드.

 

 

1. startActivityForResult()로 Activity 호출하기

기존에 startActivity()로 호출하던 것을 startActivityForResult()로 호출을 하면서 인수를 하나 추가. 이 인수는 0보다 크거나 같은 integer 값으로 추후 onActivityResult() 메소드에도 동일한 값이 전달되며 이를 통해 하나의 onActivityResult() 메소드에서 (만약 있다면) 여러 개의 startActivityForResult()를 구분할 수 있습니다. 

 

private int REQUEST_TEST = 1;

...

button.setOnClickListener(new View.OnClickListener() {

  @Override

  public void onClick(View v) {

    Intent intent = new Intent(ActivityA.this, ActivityB.class);

    startActivityForResult(intent, REQUEST_TEST);

    // startActivityForResult(intent); } });

2. 호출된 Activity에서 setResult()로 결과 돌려주기

호출된 Activity에서 setResult() 메소드로 결과를 저장할 수 있음. 성공인 경우는 RESULT_OK, 실패인 경우 RESULT_CANCEL을 설정. 

이후 finish() 메소드로 Activity를 종료.

 

Intent intent = new Intent();

intent.putExtra("result", "some value");

setResult(RESULT_OK, intent);

finish();

3. onActivityResult()에서 결과 확인하기

onActivityResult() 메소드를 통해 호출된 Activity에서 저장한 결과를 돌려줌. 이 때 requestCode는 처음 startActivityForResult()의 두번째 인수 값이며, resultCode는 호출된 Activity에서 설정한 성공(RESULT_OK)/실패(RESULT_CANCEL) 값. 이를 통해 어떤 호출 (REQUST_TEST) 이었는지와 결과가 어떠한지 (RESULT_OK)를 알 수 있으므로 그에 맞는 동작을 진행할 수 있음. .


@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  super.onActivityResult(requestCode, resultCode, data);

  if (requestCode == REQUEST_TEST) {

  if (resultCode == RESULT_OK) {

    Toast.makeText(MainActivity.this, "Result: " + data.getStringExtra("result"), Toast.LENGTH_SHORT).show();

  } else { // RESULT_CANCEL

    Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show(); }}

//else if (requestCode == REQUEST_ANOTHER) {

  ... } }


 

참고 : zeany.net/54