액티비티 백버튼 누를 때 데이터 전달 방법
- 세컨드 액티비티에서 데이터를 가지고 메인 액티비티로 전달하여 실행
1. 두 번째 화면 액티비티에 백버튼 눌렀을 때, 동작하는 코드를 작성한다.
- onCreate 함수 안에 작성한다.
- setResult 함수 안에 작성하는 코드번호를 정해서 보내주고,
정해진 코드번호를 이용해서 데이터를 받을 수 있다.
-1, 0, 1은 이미 정해진 코드번호이다.
// 백 버튼 눌렀을떄 동작하는 코드 작성
getOnBackPressedDispatcher().addCallback(new OnBackPressedCallback(true){
@Override
public void handleOnBackPressed() {
// intent 객체 생성해서 원하는 데이터를 setResult 코드를 정해서 보낸준다.
Intent intent = new Intent();
intent.putExtra("age", age);
setResult(1000, intent);
finish();
}
});
2. 첫 번째 화면에서 데이터를 받아준다.
- 멤버 변수로 만들어서 사용한다.
- ActivityResultLauncher <> 사용
ActivityResultLauncher<Intent> launcher =
registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult o) {
// 내가 실행한 엑티비티로 부터, 데이터를 받아오는 부분
if (o.getResultCode() == 1000){
Log.i("LIFE MAIN","실행");
int age = o.getData().getIntExtra("age", 0);
txtAge.setText("10년 후 나이는 " + age + " 살");
}
}
});
- 버튼을 클릭하면 나오는 코드에 위에 변수를 작성해서 실행시켜 준다.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = editName.getText().toString().trim();
String strAge = editAge.getText().toString().trim();
int age = Integer.parseInt(strAge);
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("name",name);
intent.putExtra("age",age);
// launcher 실행하는 코드
launcher.launch(intent);
}
});
* 포스팅. 액티비티 간의 단방향 데이터 전달 방법
https://msdev-st.tistory.com/177
* 포스팅. 액티비티 간의 양방향 데이터 전달 방법
https://msdev-st.tistory.com/178
* LifeCycle
https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko