애플리케이션을 개발할 때는 다수의 Activity(화면)을 코딩하게 됩니다.
하나의 Activity로는 서비스를 제공하는 데에 있어서 많은 제한이 있기 때문입니다.
즉, 용도에 맞는 Activity들이 존재하고, 알맞는 시기에 화면 전환이 이루어져야 합니다.
단순히 새로운 Activity를 열어주는 경우도 있고, Sub Activity의 결과값을 Main Activity로 넘겨줘야 하는 경우도 있습니다.
이런 활동을 startActivity()와 startActivityForResult()가 지원합니다.
1. startActivity()
startActivity()는 단순히 새로운 Activity를 시작할 때 사용합니다.
앞서 intent 화면 전환 포스팅에서도 사용한 것이 startActivity()입니다.
원형과 사용법은 간단하며 코드는 다음과 같습니다.
// 원형
public void startActivity(Intent intent)
// 사용법
Intent intent = new Intent(MainActivity.this, SubActivity.class);
startActivity(intent)
자세한 사용법은 Intent 화면전환을 참조해주시길 바랍니다.
2. startActivityForResult()
startActivityForResult()는 startActivity()와 달리 Sub Activity의 결과값을 Main Activity로 가져올 수 있습니다.
결과값을 가져오기 위해서 onActivityResult()도 함께 사용하게 됩니다.
각각의 원형은 다음과 같습니다.
public void startActivityForResult (Intent intent, int requestCode)
protected void onActivityResult (int requestCode, int resultCode, Intent data)
startActivityForResult()는 매개변수가 2개로 intent와 requestCode가 있습니다.
1) intent는 Sub Activity입니다. (해당 예제에선 Activity 전환을 다루기에 Sub Activity로 명시했습니다.)
2) requestCode는 해당 Activity를 구별할 수 있는 상수값으로 requestCode는 호출된 Activity가 종료될 때 반환됩니다.
onActivityResult()는 매개변수가 3개로 requestCode, resultCode, data가 있습니다.
1) requestCode는 startActivityForResult()에 제공되었던 상수값으로, Sub Activity가 종료되면서 반환된 값이 저장됩니다.
2) resultCode는 setResult()를 통해 Sub Activity가 반환한 int형 결과 코드입니다. 정상 동작 여부를 판단할 수 있습니다.
3) data는 Main Activity에게 결과 데이터를 반환할 수 있는 intent입니다.
requestCode를 통해 Activity를 구별하게 되면 Activity 출처를 식별할 수 있고, onActivityResult() 내에서 제어가 가능해져서 안정성이 좋아집니다.
자세한 사용법은 예제를 통해서 설명하겠습니다.
3. startActivityForResult() 예제
Main Activity에서 + 버튼을 누르면 Sub Activity가 호출됩니다.
Sub Activity에서 2개의 숫자를 지정해주고 버튼을 누르면 두 수의 합이 Main Activity로 반환해주도록 작성했습니다.
아래는 Main Activity에서 + 버튼을 눌렀을 때 Sub Activity가 호출되는 코드입니다.
btn_plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, CalculateActivity.class);
startActivityForResult(intent, REQUEST_PLUS);
}
});
아래는 Sub Activity에서 결과값 반환 버튼을 눌렀을 때 실행되는 코드입니다.
호출된 Sub Activity에선 2개의 정수값을 입력 받습니다.
결과값 반환 버튼을 눌렀을 때 입력된 정수값이 없으면 0으로 처리해서 합을 구합니다.
btn_result.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(edit_1.getText().toString().equals(""))
edit_1.setText("0");
if(edit_2.getText().toString().equals(""))
edit_2.setText("0");
int num1 = Integer.parseInt(edit_1.getText().toString());
int num2 = Integer.parseInt(edit_2.getText().toString());
int result = num1 + num2;
Intent intent = new Intent();
intent.putExtra("result", "연산 결과는 " + result + " 입니다.");
setResult(RESULT_OK, intent);
finish();
}
});
intent에 'result'라는 key값과 "연산 결과는 ..."이라는 value를 저장합니다.
setResult()에 정상처리 되었음을 알리는 상수값 RESULT_OK와 결과값을 지니는 intent를 Main으로 보냅니다.
finish()를 통해 Sub Activity를 종료해줍니다.
이후 Main Activity로 넘어와서 onActivityResult()가 동작합니다.
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if(requestCode == REQUEST_PLUS && resultCode == RESULT_OK) {
tx_result.setText(data.getStringExtra("result"));
}
}
requestCode가 Sub Activity를 호출할 때 제공했던 REQUEST_PLUS이면서 resultCode가 RESULT_OK이면
TextView에 결과값을 작성하는 코드입니다.
아래는 실행 결과입니다.
전체 코드는 Github를 참고해주시면 감사하겠습니다.
※ 참조
https://crazykim2.tistory.com/497
https://mailmail.tistory.com/15
'Android' 카테고리의 다른 글
[Android] 홍드로이드 기초 강의 - Camera 촬영 및 Image 가져오기_MainActivity (0) | 2022.03.02 |
---|---|
[Android] 홍드로이드 기초 강의 - Camera 촬영 및 Image 가져오기_환경설정 (0) | 2022.02.26 |
[Android] 홍드로이드 기초 강의 - SharedPreferences로 데이터 세이브/로드 (0) | 2022.02.21 |
[Android] 홍드로이드 기초 강의 - TextView, EditText, Intent 화면 전환 (0) | 2022.02.18 |
AMD 라이젠 CPU에서 가상머신(AVD) 실행하기 (0) | 2022.02.17 |