코린이 탈출기

chapter 5.6 - 다른 화면을 통해 데이터 받아오기 (2) - Intent 응용 / B -> A ( 데이터 입력 완료 후 A 화면으로 복귀하기 ) 본문

인터넷 강의/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기

chapter 5.6 - 다른 화면을 통해 데이터 받아오기 (2) - Intent 응용 / B -> A ( 데이터 입력 완료 후 A 화면으로 복귀하기 )

50HEE 2021. 5. 4. 18:21

2021.05.03 - [안드로이드/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기] - chapter 5.5 - 다른 화면을 통해 데이터 받아오기 - Intent 응용 (1) / A -> B (데이터 조회)

 

chapter 5.5 - 다른 화면을 통해 데이터 받아오기 - Intent 응용 (1) / A -> B (데이터 조회)

기존의 Intent는 A 화면에서 B화면으로 이동하는 것만 다루었습니다. 이번에는 A화면을 통해 데이터를 조회하고 B화면을 통해 데이터를 입력하고 확인 후 다시 A 화면으로 돌아가서 입력한 값을 반

sohee0428.tistory.com

이전 발행 글에서 A 화면에서 B 화면으로 이동하였습니다.

이어서 B 화면에 데이터를 입력하고 확인 버튼을 눌러 다시 A 화면으로 넘어가는 방법을 보겠습니다.

 

 

 MainActivity를 A 화면으로 EditNicknameActivity를 B화면으로 부르겠습니다.

 

 

 

코드를 작성하는 곳은 EditNicknameActivity.kt 입니다.

 

B 화면 코드

A 화면에서 B 화면으로 넘어와 이제 데이터를 입력할 차례입니다.

 

B 화면에 새 닉네임을 입력한 후 입력 완료 버튼을 눌렀을 때 실행할 코드를 작성할 차례입니다. 14번 줄과 같습니다.

버튼 이름.setOnClickListener { }

 

입력한 새 닉네임을 변수로 저장하여 조회하겠습니다. 나중에 값을 반영하기 위해 text를 이용합니다. 18번 줄과 같습니다.

val 변수 이름1 = 입력한 내용의 id.text.to타입()

 

2021.04.22 - [안드로이드/클래스101 - 비전공자들을 위한 나만의 안드로이드 앱 만들기] - chapter 4.1 - 코틀린으로 UI 속성 변경해 보기 - Text

 

이제 새로 입력한 닉네임을 가지고 다시 A 화면으로 복귀해야 할 차례입니다.

데이터를 가져오기 위해 Intent를 이용합니다. 이때 사용하는 Intent는 결과 데이터를 들고 가기 위해 비어있게 만들어 사용합니다. 

기존의 Intent의 경우 출발지와 도착 액티비티를 설정하였습니다.

하지만 A 화면에서 코딩 당시 startActivity가 아닌 startActivityForResult를 이용하였습니다.

예를 들면 startActivity는 편도 항공 티켓이라고 하면 startActivityForResult는 왕복 항공 티켓이기 때문에 B 화면에 사용할 Intent에는 따로 또 적을 필요가 없다고 생각하면 됩니다. 

그리하여 비어있는 Intent를 작성해 줍니다. 25번 줄과 같습니다.

val 변수 이름2 = Intent()

 

이제 티켓을 만들었다면 이제 수화물을 붙일 차례입니다.

수화물을 붙이는 방법은 기존과 동일하게 putExtra를 사용하고, 이름표와 짐을 입력해주는 것은 동일합니다.

변수 이름2.putExtra("데이터 이름표", 변수 이름1)

 

이제 확인 버튼을 눌러 다시 A 화면으로 돌아가면 됩니다.

하지만 B 화면에는 확인 버튼과 취소(뒤로 가기) 버튼이 있어 구별해주어야 합니다.

즉, 확인 버튼의 이벤트 처리에서 '입력 완료' 버튼을 눌렀다고 세팅을 하고 들고 갈 데이터도 같이 세팅해야 합니다.

입력한 데이터를 받아서 빈 Intent를 이용해 담아서 확인 버튼을 누른 게 맞고, 결과 데이터를 들고 가기 위한 빈 Intent를 이용하였다는 것을 확인해야 합니다.

이때 사용하는 것이 setResult 입니다. 29번 줄처럼 setResult를 사용하여 OK 버튼과 설정한 변수를 넣어줍니다.

OK 버튼은 자동 완성되어 RESULT_OK만 작성하여도 알아서 Activity가 작성됩니다.

setResult(Activity.RESULT_OK, 변수 이름2)

 

이제 마무리로 다시 A 화면으로 돌아갈 차례입니다.

이제 B 화면은 끝난 것으로 닫아야 하기 때문에 finish를 사용합니다. 31번 줄과 같습니다.

finish()

 

 

마지막으로 다음 챕터를 통해 A 화면으로 넘어가서 변경한 새 닉네임을 대입하겠습니다.

 

 

 

<코드 정리>

버튼 이름.setOnClickListener 

val 변수 이름1 = 입력한 내용의 id.text.to타입()

val 변수 이름2 = Intent()

변수 이름2.putExtra("데이터 이름표", 변수 이름1)

setResult(Activity.RESULT_OK, 변수 이름2)

finish()

}

Comments