안드로이드 스튜디오/Java

Activity - 쌍방향 액티비티 구현

류창 2021. 10. 29. 16:58
반응형

지난글에는 Intent를 이용하여, 단방향 액티비티 즉 한쪽으로만 정보를 보냈지만

 

이번에는 서로 주고받는 쌍방향 액티비티를 구현해보겠습니다.

 

 

 

기본적으로 버튼1개와, EditText 2개를 생성합시다.

 

intent는 SecondActivity로 보내고, editText의 정보 2개를 보냅니다.

 

단방향과 달라진점은 startActivityForResult와, 두번째 파라미터인 requestCode인 점인데요,

 

이 requestCode는 상호작용하기위한 일종의 Key값이됩니다.

 

 

SecondActivity 코드

 

세컨드 액티비티에선  editText로보낸 정보 2개를 getIntExtra로 받습니다. (숫자값을받을거라)

 

getIntExtra는 defaultValue까지 입력해주셔야합니다. 

 

값1과 값2를 받았으면, 버튼을 눌럿을때, 다시 메인 액티비티로 정보를 변환해서 보냅니다.

 

Intent 를 메인액티비티로 경로를 설정하고, putExtra로 정보를 보냅니다.

 

setResult로  ResultCode를 Result_OK(성공값)로 설정합니다.

 

다시 MainActivity

메인으로 돌아와서, 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는 나중에 유지보수하기 힘듭니다. 

 

requestCode가 많아지면...

지금은 양방향Intent가 1개라서 하나뿐이지만, 10개가 넘어간다고 생각하면

 

저 작은 OnActivityResult안에 엄청나게 긴 코드들이 차지가될겁니다. 

 

코드가 길어지면 당연히 찾기가 불편해집니다.

 

그리고 Intent를 requestCode로 구분하기에,  어떤정보의흐름인지 분간이어렵습니다.

 

그래서 이 양방향흐름을 모듈화 시킵니다.

 

ActivityResultLauncher<Intent> 를통해, 모듈화를 시킵니다.

 

 

반응형