본문 바로가기
  • 콩's 코딩노트
Android

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

by Cong_S 2022. 7. 13.

Intent로 액티비티간 화면 전환하는 포스팅을 한 적이 있다.

https://cong-s.tistory.com/237

 

Android Studio - 새로운 Activity 추가하기 / 액티비티간에 연결하기

새로운 액티비티를 만들어보자. 위 캡쳐대로 만들수 있다. Main의 onCreate 안에 아래와 같이 Intenr와 startActivity 코드를 작성해 액티비티를 연결할 수 있다. Intent intent = new Intent(MainActivity.this,..

cong-s.tistory.com

 

 

이번에는 액티비티 간의 데이터 전달 방법을 알아볼 것이다. 이번에는 양방향 데이터 전달을 알아보자.

 

String email = editEmail.getText().toString().trim();
String name = editName.getText().toString().trim();
String ageStr = editAge.getText().toString().trim();

int age = Integer.valueOf(ageStr).intValue();

double hiddenData = 3.1414;

// 새로운 액티비티를 띄우고,
// 데이터를 전달한다.
Intent intent = new Intent(MainActivity.this, SecondActivity.class);

intent.putExtra("email", email);
intent.putExtra("name", name);
intent.putExtra("age", age);
intent.putExtra("hidden", hiddenData);

// 실행한 액티비티로부터 데이터를 받아오는 것이 있는 경우!!
// 아래 코드는 예전엔 사용했지만 업데이트 후 사용 안 함
// startActivityForResult(intent, 0);

// 위에서 만든 메소드로 사용
startActivityResult.launch(intent);

여러 UI 개체들을 통해 입력된 데이터들을 여러 변수에 저장한 후 다른 액티비티로 데이터를 옮기려 한다.
먼저 intent를 만든 후 putExtra 메소드를 사용한다.

- 첫번째 파라미터 : 키 값 지정

- 두번째 파라미터 : 데이터 또는 데이터가 들어있는 변수 

 

다시 데이터가 오게 만드는 코드는 다음과 같다.

예전에는 startActivityForResult를 사용했지만 업데이트되며 현재는 사용하지 않게 되었다.

 

현재는 다음과 같이 작업한다.

// 내가 실행한 액티비티로 부터, 데이터를 받아와서 처리하는 코드
    ActivityResultLauncher<Intent> startActivityResult =
            registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
                    new ActivityResultCallback<ActivityResult>() {
                        @Override
                        public void onActivityResult(ActivityResult result) {
                            // result 에는 resultCode 가 있다.
                            // resultCode 의 값으로, 여러가지 구분해서 사용이 가능.
                            if (result.getResultCode() == 0){
                                int age = result.getData().getIntExtra("age", 0);
                                editAge.setText(""+age);
                            }
                        }
                    });

다음과 같은 메소드를 startActivityResult라는 변수에 담은 것이다. onCreate 밖에서 미리 만들어둔 위 코드를 이용해

 

맨 마지막에 

startActivityResult.launch(intent);

startActivityResult 에다가  intent 를 담아서 launch 해준다.

 

 

 

댓글