이 코드는 Intent를 사용하여 데이터를 전달하고 새로운 액티비티를 시작하는 예이다
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
// 액티비티에 데이터를 전달하는 방법
intent.putExtra("name", name);
intent.putExtra("age", age);
launcher.launch(intent);
//startActivity(intent);
new Intent( ) 로 새로운 Intent 객체를 생성
첫번째 파라미터에는 현재 액티비티의 컨텍스트(Context)
두번째 파라미터에는 전환할 목표 액티비티를 지정
여기서 첫번째는 this이고 두번째는 class로 사용한 이유는
현재 객체에서 이동하려는 클래스를 물어보는것과 같기 때문
intent.putExtra( )를 통해 데이터를 intent 객체에 추가
첫번째 파라미터에는 키
두번째 파라미터에는 밸류
launcher.launch( ) 를 통해
ActivityResultLauncher를 이용 다음 액티비티로 이동하면서
데이터를 반환이 가능하다
주석처리 된 startActivity는 다음액티비티로 이동하지만 데이터를 갖고 돌아오지는 못한다
즉,
데이터를 단방향으로 주면서 액티비티를 이동하고 싶다면
startActivity가 사용되며
데이터를 양방향으로 주고 받는 액티비티가 필요하다면
launcher.launch가 사용된다
그럼 이번엔 뒤로가기 버튼을 눌렀을때는 어떻게 될까
getOnBackPressedDispatcher().addCallback(new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
Intent intent = new Intent();
intent.putExtra("age" , age);
setResult(1000, intent);
finish();
}
getOnBackPressedDispatcher() 로
뒤로 가기 버튼이 눌렸을 때 발생하는 이벤트를 처리
새로운 OnBackPressedCallback을 생성
뒤로 가기 버튼이 눌렸을 때 수행할 작업을 정의
true는 콜백이 활성 상태임을 의미
Intent intent = new Intent();
intent.putExtra("age" , age);
setResult(1000, intent);
는 인텐트 객체를 생성
다시 age라는 이름의 변수로 age를 저장하여 데이터를 넘길 준비를하고
Resultcode로 1000으로 설정하여
intent로 담아두었다
그리고 화면을 종료시키자
finishi() 를 통해 화면을 종료시키고
뒤에 숨겨져있던 전 페이지를 불러오면 끝이다
메인액티비티
ActivityResultLauncher<Intent> launcher =
registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult o) {
Log.i("LIFE MAIN", "onActivityResult 실행");
// 내가 실행한 액티비티로 부터, 데이터를 받아오는 부분
if ( o.getResultCode() == 1000 ){
Log.i("LIFE MAIN", "세컨드 액티비티로부터 데이터 받는다.");
int age = o.getData().getIntExtra("age", 0);
txtAge.setText("10년 후 나이는 "+ age +"살");
}
}
});
그리고 메인액티비티에서
이렇게 입력하여
if 부분에서 리절트코드가 위에서 설정한 숫자와 같다면
텍스트가 바뀌게끔 설정이 가능하다
'Java > AndroidStudio' 카테고리의 다른 글
Android - 리사이클러뷰 Context, getAdapterPosition, 데이터 수정 (0) | 2024.06.10 |
---|---|
Android - SharedPreferences 데이터저장과 불러오기 (0) | 2024.06.07 |
Android - AlertDialog , 액티비티 종료법 (0) | 2024.06.05 |
Android - LinearLayout (0) | 2024.06.05 |
Android - 로그 가져오기, 스낵바, 토스트 (0) | 2024.06.04 |