
먼저!! registerForActivityResult()을 찾게 된 이유!
👉 내가 알고 있던건 Intent(출발지 엑티비티, 도착지 엑티비티) 하나 변수에 넣어서,
Intent변수.putExtra(네임텍, 보내줄 데이터)로 싣고,
startActivity(Intent변수) 해서 [단방향]으로 주는거만 알고 있었음
[양방향]으로 주고 받는 걸 찾아보니...
startActivityForResult() 와 onActivityResult()를 사용했지만 deprecated(더 이상 사용되지 않음) 되었다...👉registerForActivityResult()요놈을 쓴다!!??
registerForActivityResult() 요놈 우예씀? (사용법 + 분석)참고: registerForActivityResult() 사용하기
val startForResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result: ActivityResult ->
if (result.resultCode == RESULT_OK) {
val str = result.data?.getStringExtra("str")!!
Toast.makeText(context, Main 으로 돌아옴, Toast.LENGTH_SHORT).show()
}
}
ActivityResultContract<I : Any?, O : Any?> : (번역:활동결과계약 - 뭔말인고???)
ActivityResultContract<I : Any?, O : Any?> = 유형 I의 입력으로 활동을 호출하고 O 유형의 출력을 생성할 수 있음을 지정하는 계약입니다...
(말이 어려우니 내 머릿속은 점점 미궁으로...🫠)
> 내가 이해한 바: 폰에서 시스템 적으로 데이터를 주고 받게 해줌
startActivity : 새 액티비티를 열어줌 (단방향)StartActivityForResult : 새 액티비티를 열어줌 + 결과값 전달 (쌍방향)result: ActivityResult -> : 다른 액티비티에서 보낸 값result.resultCode == RESULT_OK : 다른 액티비티에서 보낸 응답 값 == RESULT_OK 일때val str = result.data?.getStringExtra("str")!!Toast.makeText(context, Main 으로 돌아옴, Toast.LENGTH_SHORT).show() :str에다가 넣음class MainActivity : AppCompatActivity(){
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater).also {setContentView(it.root)}
// ActivityMainBinding UI만들어 주는 [activity_main.xml]에 상응하는 레이아웃 만드는 뭐 그런 짜슥?
with(binding){
//버튼하나 만들어서 setOnClickListener 달고
//버튼 클릭 시 데이터를 받아 올 SecondActivity 를 실행한다
btnSecond.setOnClickListener {
val intent = Intent(this, SettingPriceActivity::class.java)
// [Activity Result에 콜백 등록]에서 만든
// [startForResult = registerForActivityResult()]를 launch(화면 이동 실행)
startForResult.launch(intent)
}
}
with(binding){
btnSend.setOnClickListener {
val intent = Intent(this, MainActivity::class.java).apply {
putExtra("str","보낼 데이터")
}
//응답코드 와 데이터(intent) 싣어 보냄
setResult(RESULT_OK,intent)
finish()
}
}
- registerForActivityResult() 이놈 문서 찾아보고, 인터넷에 떠도는 거 따라 써보고, 몇번 봐도 이해 안갔는데... 깊이 파보니 좀 알것네...후 🙍