오늘은 저번에 못했던 추가기능을 다시 한번 구현해보았습니다.
검색해보고 같은 조원분 코드와 비교도 해보면서 구현해보았습니다.
https://velog.io/@thundevistan/Android-Studio-registerForActivityResult
https://jige.tistory.com/36
다음 두 블로그를 보면서 이해하고 구현해봤는데 원래 제 코드를 수정하고 class에서 다시 전역변수를 선언하고 함수 setResultNext를 선언해주면서 코드를 바꿔보았습니다.
class SignInActivity : AppCompatActivity() {
private lateinit var edit_id: EditText
private lateinit var edit_password: EditText
private lateinit var resultLauncher: ActivityResultLauncher<Intent>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sign_in)
override fun 하기 전에 전역변수 선언과 만들어준 변수 resultLauncher에
registerForActivityResult메소드를 활용해서 ActivityLauncher를 만들어 준다.
그리고 받아오는 함수를 만들기 전에 값을 보내는 SignUpActivity를 수정해줬는데
edit_id와 edit_password를 전역변수로 다시 설정해줬다.
class SignUpActivity : AppCompatActivity() {
private lateinit var edit1:EditText
private lateinit var edit_id:EditText
private lateinit var edit_password:EditText
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sign_up)
private fun signUp() {
val intent = Intent(this@SignUpActivity, SignInActivity::class.java)
intent.putExtra("id", edit_id.text.toString())
intent.putExtra("password", edit_password.text.toString())
setResult(RESULT_OK, intent)
finish()
}
그 다음 SignInActivity로 돌아와서 회원가입 버튼을 눌렀을 때 코드를 다음과 같이 바꿔줬다.
btn_in2.setOnClickListener {
val intent = Intent(this, SignUpActivity::class.java)
resultLauncher.launch(intent)
}
원래는 resultLauncher.launch(intent)가 startActivity(intent)였는데
Activity 이동 및 ActivityResult 수신을 위해 바꿔주었다.
private fun setResultNext() {
resultLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val id = result.data?.getStringExtra("id") ?: ""
val password = result.data?.getStringExtra("password") ?: ""
edit_id.setText(id)
edit_password.setText(password)
}
}
}



아이디와 비밀번호 가져오는 것도 성공!
resultLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val id = result.data?.getStringExtra("id") ?: ""
val password = result.data?.getStringExtra("password") ?: ""
edit_id.setText(id)
edit_password.setText(password)
val intent = Intent(this@SignUpActivity, SignInActivity::class.java)
intent.putExtra("id", edit_id.text.toString())
intent.putExtra("password", edit_password.text.toString())
setResult(RESULT_OK, intent)
finish()
처음에는 두 문장 모두 함수안에 넣지않은 다음과 같은 형태로 진행하였는데
두 문장을 private fun 안에 넣어서 동작하게 만들어줬더니 잘 동작되었다.
사실 아직 개념자체는 좀 이해가 잘 안되지만...사용만 해본 것 같다 ㅠㅠ
오늘은 뭔가 몸이 좀 몸살오기 직전의 느낌이라 싫다 ㅠㅠ 비도오고 으슬으슬하다 ㅠㅠ
주말동안 결혼식 뒷풀이 너무 신나게 다녀와서 그런가 몸살난 것 같다.
오늘은 일찍 자고 내일은 튜터님께 저번 스탠다드반 과제 피드백 받으러 가야겠다!