안드로이드 개발 Activity 호출하고 결과값을 받는 onActivityForResult 사용하는 방법

 

환경: Android Studio

 

보통 Activity 를 이동할 때 결과를 리턴 받지 않는 startActivity() 함수를 사용합니다. 그런데 설정 화면처럼 이동한 화면에서 선택한 결과를 호출한 Activity 에서 리턴 받아야 하는 경우라면 어떤 함수를 사용해야 할까요? 답은 startActivityForResult() 입니다. 메인 Activity 에서 이동한 Activity 의 종료 결과를 받는 방법에 대해 알아 보겠습니다.

 

Activity 이동할 때 결과값을 리턴 받지 않는 소스는 다음과 같습니다. Intent startActivity() 사용해서 원하는 Activity 로 이동합니다.

public class OneActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one);

        Button btnSend = (Button) findViewById(R.id.btnSend);
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), TwoActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }
}

 

다음은 결과값을 받기 위한 호출할 startActivityForResult() 함수와 결과값을 받는 콜백함수 onActivityResult() 입니다. 호출할 메인 Activity 의 소스는 다음과 같습니다. startActivityForResult() 에서 두 번째 인수값인 0 은 호출한 Activity 에서 결과값이 없을 때 리턴되는 기본값입니다. 결과값을 받는 콜백 함수는 onActivityResult() 이며, resultCode 값을 받습니다.

public class OneActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_one);

        Button btnSend = (Button) findViewById(R.id.btnSend);
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), TwoActivity.class);
                startActivityForResult(intent, 0);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Toast.makeText(getApplicationContext(), "ResultCode : " + resultCode, Toast.LENGTH_LONG).show();
    }
}

 

두 번째 호출 Activity 에서는 setResult() 함수로 반환할 결과값을 넣고 종료합니다. 그러면 호출한 Activity 에서는 resultCode 파라미터로 전달이 되겠죠.

public class TwoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);

        setResult(100);
        finish();
    }
}

 

결과 화면은 다음과 같습니다. 버튼을 누르면 호출한 Activity 에서 전달받은 값을 토스트 메시지로 뿌립니다

Posted by 녹두장군