본문 바로가기
Java/AndroidStudio

Android - 액티비티간의 데이터 전달 방법

by 하니__ 2024. 6. 7.

 

이 코드는 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 부분에서 리절트코드가 위에서 설정한 숫자와 같다면

텍스트가 바뀌게끔 설정이 가능하다