본문 바로가기
Android Studio

[Android Studio] Activity 데이터 전달(+Back버튼 이벤트 처리)

by coding_su 2023. 1. 30.

📝Activity 데이터 전달

단방향 데이터 전달하기

인텐트를 만들어 화면 띄우는 코드를 셋팅했다면

그 밑에 새로운 액티비티에 전달할 데이터를 셋팅한다(key와 value로 데이터 셋팅)

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

위처럼 전달하는 코드를 작성하면 새로운 액티비티(SecondActivity)는 그 데이터를 받아야하는 코드를 작성한다

 

이 액티비티를 실행한 액티비티로부터 데이터를 받아오는 코드

(인텐트를 가져오고 그 인텐트에 들어있는 키값으로 데이터를 받아온다)

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

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

 

액티비티간 양방향 데이터 전달하기

SecondActivity에서 Back 버튼을 눌렀을때 이벤트를 처리하는 코드를 먼저 작성했다

Back 버튼은 onCreate 밖에서 onBackPressed를 오버라이드

@Override
    public void onBackPressed() {
    	// 인텐트 생성
        Intent intent = new Intent();
        intent.putExtra("age10", age);
        // 돌려줄때는 setResult 함수 이용
        setResult(0, intent);

        // 기존에 있던 super코드는 아래에 위치시켜준다
        super.onBackPressed();
    }

 

기존 액티비티로 돌아와 멤버 변수 밑에 실행한 액티비티로부터 데이터를 다시 받아올 launcher 코드 작성하고

ActivityResultLauncher<Intent> launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {
                    // 위 코드에서 0으로 설정했기때문에 0으로 입력한 것(보통은 상수처리한 변수 사용)
                    if(result.getResultCode() == 0){
                        int age10 = result.getData().getIntExtra("age10", 0);
                        txtAge.setText(""+age10);
                    }
                }
            });

 

이제 단방향 데이터 전달이 아니고 양방향 데이터 전달이기 때문에 startActivity(intent); 코드를 삭제하고

위에서 만든 launcher를 사용한다 launcher.launch(intent); 로 바꿔준다

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

 

댓글