Activity간 데이터를 주고받기 위해 사용한다.
자세한 건 공식 문서를 참고
A Activity에서 홀, 짝 중 하나를 정한 후 B Activity에 데이터를 넘겨준다.
B Activity에서 랜덤으로 생성 된 홀, 짝과 내가 선택한 값을 비교 후 결과를 다시 A Activity에 넘겨준다.
앱을 실행 후 홀/짝 중 하나를 고른다
버튼을 눌러 다음 액티비티로 넘어가 랜덤으로 생성 된 홀/짝을 확인한다.
SENDRESULT 버튼을 누르면 내가 선택한 값과 랜덤으로 생성된 값을 비교해 결과를 첫 번째 액티비티로 보낸다.
class MainActivity : AppCompatActivity() {
private lateinit var btn: Button
private lateinit var input: RadioGroup
private lateinit var str: String
private val launcher: ActivityResultLauncher<String> =
registerForActivityResult(ActivityContract()) { result: String? ->
result?.let {
Toast.makeText(this, it, Toast.LENGTH_SHORT).show()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn = findViewById(R.id.btn)
input = findViewById(R.id.input)
//라디오 버튼 홀, 짝 중 하나를 선택했을 시 홀 혹은 짝으로 값을 초기화 해주는 부분
input.setOnCheckedChangeListener { _, checkedId ->
when (checkedId) {
R.id.odd -> str = "홀"
R.id.even -> str = "짝"
}
}
btn.setOnClickListener {
launcher.launch(str)
}
}
}
class ActivityContract : ActivityResultContract<String, String?>() {
/*
MainActivity에서 넘어온 값을 Intent로 ResultActivity로 전달
*/
override fun createIntent(context: Context, input: String): Intent {
return Intent(context, ResultActivity::class.java).apply {
putExtra("input", input)
}
}
/*
ResultActivity에서 넘어온 값을 MainActivity의 launcher로 전달
*/
override fun parseResult(resultCode: Int, intent: Intent?): String? {
return when (resultCode) {
Activity.RESULT_OK -> intent?.getStringExtra("result")
else -> null
}
}
}
class ResultActivity :AppCompatActivity() {
lateinit var btn : Button
lateinit var strResult : TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_result)
btn = findViewById(R.id.btn)
strResult = findViewById(R.id.result)
//랜덤 함수로 숫자 1 혹은 2를 생성 후
val resultRandom = (1..2).random()
//1일 경우 홀로, 2일 경우 짝수로 결과값 표시
strResult.text = when (resultRandom) {
1 -> "결과는 \'홀\'입니다."
2 -> "결과는 \'짝\'입니다."
else -> "오류"
}
//매인 액티비티에서 가져온 값을 숫자로 바꿔줌
val input = when(intent.getStringExtra("input")) {
"홀" -> 1
"짝" -> 2
else -> "오류"
}
btn.setOnClickListener {
//내가 선택한 홀/짝과 결과가 같은지 비교
if (input == resultRandom) {
setResult(Activity.RESULT_OK, Intent().apply { putExtra("result", "맞췄습니다!") })
} else {
setResult(Activity.RESULT_OK, Intent().apply { putExtra("result", "틀렸습니다!") })
}
finish()
}
}
}