지난글에는 Intent를 이용하여, 단방향 액티비티 즉 한쪽으로만 정보를 보냈지만
이번에는 서로 주고받는 쌍방향 액티비티를 구현해보겠습니다.
기본적으로 버튼1개와, EditText 2개를 생성합시다.
intent는 SecondActivity로 보내고, editText의 정보 2개를 보냅니다.
단방향과 달라진점은 startActivityForResult와, 두번째 파라미터인 requestCode인 점인데요,
이 requestCode는 상호작용하기위한 일종의 Key값이됩니다.
세컨드 액티비티에선 editText로보낸 정보 2개를 getIntExtra로 받습니다. (숫자값을받을거라)
getIntExtra는 defaultValue까지 입력해주셔야합니다.
값1과 값2를 받았으면, 버튼을 눌럿을때, 다시 메인 액티비티로 정보를 변환해서 보냅니다.
Intent 를 메인액티비티로 경로를 설정하고, putExtra로 정보를 보냅니다.
setResult로 ResultCode를 Result_OK(성공값)로 설정합니다.
메인으로 돌아와서, Ctrl+Space 단축키로 OnActivityResult 메소드를 불러옵니다.
우리가 메인액티비티에서 intent를 보내면서 설정한 requestCode->0 를 조건으로 받고,
두번째 액티비티에서 SetResult의 ResultCode값을 RESULT_OK로 설정했으니 조건으로 받읍시다.
그후, 두번째 액티비티에서 가공된정보를 getExtra로 받고, 결과값을 설정했습니다.
결과화면 :
값1, 값2를 설정하고 New Activity 버튼을 눌러봅시다.
아직 결과값은 나타나지 않았습니다.
SecondActivity의 화면입니다. First로부터받은 데이터의 이름이 버튼의 이름으로 잘 입력되었네요.
First로부터의데이터 버튼을 누르면 SecondActivit가 종료되고, 정보를 가공해서 메인에 넘겨줍니다.
여기서 정보가공은 값1과 값2를 더한 작업입니다.
메인으로 돌아와보니, 75+42가 더해진 117이 결과값텍스트에 출력이되었습니다.
-------------------------------------------------------------------------------------------------------------------
이상 쌍방향 액티비티를 구현이 완료되었는데, 코드에 뭔가 이상한점이 발견됩니다.
startActvityForResult에 취소선이 그어져있습니다. 그 이유는 이 코드가 deprecated 해서입니다.
deprecated가 뭔데..?
한마디로 쓸수는 있는데, 너 정말 이거 쓸꺼야?? 이거보다 더 좋은 방법이있는데?
우리 앞으로 새로운 버전낼때 이거 지원안할거야 라고 알려주는겁니다.
실제로, 지금 쓰고있는 startActivityForResult는 나중에 유지보수하기 힘듭니다.
지금은 양방향Intent가 1개라서 하나뿐이지만, 10개가 넘어간다고 생각하면
저 작은 OnActivityResult안에 엄청나게 긴 코드들이 차지가될겁니다.
코드가 길어지면 당연히 찾기가 불편해집니다.
그리고 Intent를 requestCode로 구분하기에, 어떤정보의흐름인지 분간이어렵습니다.
그래서 이 양방향흐름을 모듈화 시킵니다.
ActivityResultLauncher<Intent> 를통해, 모듈화를 시킵니다.
'안드로이드 스튜디오 > Java' 카테고리의 다른 글
안드로이드 쓰레드(Thread2) Handler 사용 (0) | 2021.11.12 |
---|---|
안드로이드 Thread (1) (0) | 2021.11.06 |
Activity 추가하기 - Intent (0) | 2021.10.28 |
안드로이드 스튜디오:레이아웃(Constraint Layout 기본 2) (0) | 2021.10.08 |
안드로이드 스튜디오 : 레이아웃 (Constraint Layout 기본) (0) | 2021.10.08 |