본문 바로가기
Android Studio

[Android Studio] Activity 단방향 데이터, 양방향 데이터 전달하는 법

by dong_su 2023. 12. 26.

단방향 데이터 전달

 

보낼 때

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("name", name);
intent.putExtra("age", age);
startActivity(intent);

인텐트 객체를 만들고 전달 데이터를 key와 value로 세팅해서 보낸다.

 

받을 때

String name = getIntent().getStringExtra("name");

// 받아온 데이터가 없을 경우 디폴트를 0으로 설정함
int age = getIntent().getIntExtra("age", 0);

보낼 때는 타입과 상관없이 putExtra인 반면, 받을 때는 get 다음에 타입을 맞게 해야된다.

getStringExtra의 경우 받아온 데이터가 없다면 null을 반환, getIntExtra의 경우 두번째 인자로 반환한다.


양방향 데이터 전달

 

Back버튼을 눌렀을 때

getOnBackPressedDispatcher().addCallback(new OnBackPressedCallback(true) {
            @Override
            public void handleOnBackPressed() {
                // 백버튼 눌렀을 때 실행할 코드 작성

                // 메인액티비티로 나이 + 10 보내고 싶다
                age += 10;

                Intent intent = new Intent();
                intent.putExtra("age", age);
                setResult(100, intent);
                finish();
            }
        });

실행할 코드와 인텐트 객체 생성 후 put으로 데이터를 넣는다.

setResult() 함수의 첫번째 인자는 코드, 두번째 인자에는 데이터를 넣고 finish()로 현재 액티비티를 종료한다.

 

기존 액티비티

 ActivityResultLauncher<Intent> launcher =
            registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
                    new ActivityResultCallback<ActivityResult>() {
                        @Override
                        public void onActivityResult(ActivityResult o) {
                            if (o.getResultCode() == 100){
                               int age = o.getData().getIntExtra("age", 0);
                               txtFuture.setText("10년 후의 나이는 : " + age);
                            }
                        }
                    });

onActivityResult()의 매개변수 안에 데이터가 들어온다. 

위 코드와 같이 사용하면 된다.

 

startActivity(intent);

// 위 코드를 아래 코드로 바꿔준다.

launcher.launch(intent);

양방향 데이터 전달이기 때문에 위 코드로 수정한다.