지난 포스팅엔 Intent를 사용하여 화면 전환과 더불어 액티비티 스택 관리에 대해서 정리하였습니다.
https://no1msh1217.tistory.com/13
[Kotlin/코틀린] Android Intent 사용법1 / 다른 액티비티로 이동하기
한 화면에 모든걸 다 표시하는 정도의 간단한 앱이 아니라면 다른 액티비티로 이동은 필연적인 요소입니다. 간단하게 다른 액티비티로 이동하는 방법을 알아봅시다. 1. 기본 사용법 val 인텐트이
no1msh1217.tistory.com
이번에는 Intent를 사용하여 다른 액티비티로 이동할 때 데이터를 전달하는 방법에 대해서 정리해보겠습니다.
A Activity -> B Activity
- 데이터가 단방향으로만 전달 되는 형태
1. 기본사용법
- A Activity
val 인텐트이름 = Intent(this , 전달할액티비티이름 :: class.java)
인텐트이름.putExtra("데이터의 이름표" , 준비해둔데이터 )
startActivity(인텐트이름)
- B Activity
val 변수이름 = intent.getStringExtra("전달했던 데이터의 이름표")
텍스트뷰변수.text = 변수이름
2. 사용해보기
- EditText에 문자를 입력하고 Button을 누르면 데이터를 가지고 인텐트를 통해 다른 액티비티로 이동하는 프로젝트입니다.
- MainActivity.kt (데이터를 가지고 전달해줄 액티비티)
package com.example.kotlinintentindependentstudy2
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnSendText.setOnClickListener {
val message = edtSendText.text.toString()
// 버튼이 눌리면 EditText에 있는 내용 저장
val textSendIntent = Intent(this , SecondActivity :: class.java)
// 인텐트 생성
textSendIntent.putExtra("message", message) // .putExtra() 메소드로 데이터 전달준비
startActivity(textSendIntent) // 인텐트 실행
}
}
}
- SecondActivity (데이터를 받을 액티비티)
package com.example.kotlinintentindependentstudy2
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_second.*
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val message = intent.getStringExtra("message")
// intent.getStringExtra("전달했던 데이터의 이름표")
txtReceive.text = message // TextView에 message 표현
}
}
A Activity -> B Activity -> A Activity
- A에서 시작하여 B에서 데이터를 가지고 다시 A로 복귀하는 형태
1. 기본 사용법
- A Activity
val 인텐트이름 = Intent(this, 이동할액티비티이름 :: class.java)
startActivityForResult(인텐트이름, 리퀘스트코드) // 리퀘스트코드는 정수로 들어갑니다.
- B Activity
val 인텐트이름 = Intent() // 단순 데이터를 담는 용도라 출발지 / 도착지 명시가 필요 없습니다.
인텐트이름.putExtra("전달할 데이터 이름표" , 전달할데이터)
setResult(RESULT_OK, 인텐트이름)
finish() // 액티비티를 종료합니다.
- A Activity 추가 코드 (다시 A Activity로 돌아올 때를 대비한 코드 , onCreate() 바깥에 작성해야 합니다.)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 리퀘스트코드이름){
if (resultCode == Activity.RESULT_OK) {
val 변수이름 = data?.getStringExtra("전달받은 데이터의 이름표")
값을나타낼텍스트뷰.text = 변수이름
}
}
}
2. 사용해보기
- 수정하기 버튼을 누르면 수정을 해주는 액티비티로 이동하고 , 닉네임을 수정한 후 다시 액티비티를 돌아오면 닉네임이 수정된 모습으로 나타나는 프로젝트입니다. (닉네임 수정 프로젝트)
- MainActivity (닉네임이 표시됩니다.)
btnModifyText.setOnClickListener {
val modifyIntent = Intent(this, ModifyActivity::class.java)
startActivityForResult(modifyIntent, REQ_CODE_NICKNAME)
}
- REQ_CODE_NICKNAME 은 멤버 변수로 선언해 줍니다.
- 원래 숫자로 표현되나 코드의 가독성을 위해 , 그리고 이 숫자가 무엇을 의미하는지를 위해 멤버 변수로 선언하는걸
추천합니다.
- ModifyActivity ( EditText로 수정하고 싶은 닉네임을 받아 Button을 누르면 다시 MainActivity로 넘겨줄 Activity입니다.)
btnSubmitText.setOnClickListener {
val nickname = edtModifyText.text.toString()
val modifyIntent = Intent()
modifyIntent.putExtra("nickname", nickname)
setResult(RESULT_OK, modifyIntent)
finish()
}
- MainActivity ( onActivityResult( ) 구현 )
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQ_CODE_NICKNAME) {
if (resultCode == RESULT_OK) {
txtNickname.text = data?.getStringExtra("nickname")
}
}
}
세줄 요약
1. A Activity -> B Activity로 데이터를 전달하는 구조는 인텐트이름.putExtra( ) 메소드 사용
2. A Activity -> B Activity -> A Activity로 데이터를 가지고 오는 구조는 StartActivityForResult( ) 사용
3. 돌아오고 나서 데이터를 관리해줄 땐 onActivityResult( ) 구현
위에서 사용한 예제
https://github.com/no1msh/KotlinIntentIndependentStudy2
GitHub - no1msh/KotlinIntentIndependentStudy2: 다른액티비티에서 수정한후 돌아오면서 데이터를 가지고오
다른액티비티에서 수정한후 돌아오면서 데이터를 가지고오는 Intent. Contribute to no1msh/KotlinIntentIndependentStudy2 development by creating an account on GitHub.
github.com
다음엔 Intent로 다른 기본 앱으로 이동에 대해 포스팅하겠습니다!
댓글