[Kotlin] 페이지 이동간 데이터 주고 받기
안드로이드 화면이동간 데이터를 주고 받는데 startActivityForResult() 메소드가 deprecated 되서 사용을 못하게 되었다.
2020년 5월 쯤 deprecated 되었고, 지금은 registerForActivityResult를 사용해서 결과 값을
받아온다고 한다.
아래는 registerForActivityResult의 사용법이다.
1.화면 이동하기(PageMove.kt)
메인 화면이 될 페이지에서 다른 페이지로 화면을 이동한다.
1
2
3
4
5
6
7
8
9
10
11
12
var btnPageMove : Button = findViewById(R.id.btnPageMove)
btnPageMove.setOnClickListener{
//입력한 텍스트를
val editText = findViewById<EditText>(R.id.textParam)
val message = editText.text.toString()
//PageMove2 화면으로 넘긴다
val intent = Intent(this, PageMove2::class.java).apply {
putExtra(EXTRA_MESSAGE, message)
}
getResult.launch(intent)
}
2. 데이터 수신부 설정(PageMove.kt)
새로운 액티비티에서 부모 액티비티로 리턴 값을 전달해주고 종료하기
1
2
3
4
5
6
7
8
9
var getResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()){ result ->
if (result.resultCode == Activity.RESULT_OK) {
val rstData = result.data?.getStringExtra("param")
//수신한 데이터를 토스트로 띄움
Toast.makeText(this ,"result Data : " + rstData, Toast.LENGTH_SHORT).show()
}
}
3. 데이터 송신부 설정(PageMove2.kt)
PageMove에서 넘어오느 데이터를 textView에 세팅하고, 그 값을 다시 리턴한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
//PageMove에서 보낸 데이터를 textView에 보여줌
val message = intent.getStringExtra(EXTRA_MESSAGE)
revView.setText(message)
//받은데이터 다시 PageMove로 리턴 후 Acitivity 종료
var btnSend : Button = findViewById(R.id.sendRev)
btnSend.setOnClickListener {
var rtText = revView.text.toString()
var intent = Intent(this, PageMove::class.java)
intent.putExtra("param", rtText)
setResult(Activity.RESULT_OK, intent)
finish()
}
굳이 데이터를 넘기고 다시 리턴 받고 할 필요는 없지만 어차피 화면 간에 데이터를
주고받고 하는 건 기본적으로 알아야 하기 때문에 위처럼 정리해 봤다.
참고용으로 전체코드를 아래에 넣어둔다.
4. 전체 코드
4.1 PageMove.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class PageMove : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_page_move)
//수신부
var getResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()){ result ->
if (result.resultCode == Activity.RESULT_OK) {
val rstData = result.data?.getStringExtra("param")
Toast.makeText(this ,"result Data : " + rstData, Toast.LENGTH_SHORT).show()
}
}
//화면이동
var btnPageMove : Button = findViewById(R.id.btnPageMove)
btnPageMove.setOnClickListener{
val editText = findViewById<EditText>(R.id.textParam)
val message = editText.text.toString()
val intent = Intent(this, PageMove2::class.java).apply {
putExtra(EXTRA_MESSAGE, message)
}
getResult.launch(intent)
}
}
}
4.2 PageMove2.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class PageMove2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_page_move2)
//PageMove에서 넘어온 데이터 보여주기
val message = intent.getStringExtra(EXTRA_MESSAGE)
revView.setText(message)
//넘어온 데이터 다시 리턴 후 Activity 종료
var btnSend : Button = findViewById(R.id.sendRev)
btnSend.setOnClickListener {
var rtText = revView.text.toString()
var intent = Intent(this, PageMove::class.java)
intent.putExtra("param", rtText)
setResult(Activity.RESULT_OK, intent)
finish()
}
}
}