: startActivityForResult ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ค๋ฅธ ์กํฐ๋นํฐ๋ฅผ ์์ํ๊ณ onActivityResult ์ฝ๋ฐฑ์ ์ค๋ฒ๋ผ์ด๋ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํจ
: registerForActivityResult ๋ฉ์๋์ ํจ๊ป ActivityResultContract๋ฅผ ์ฌ์ฉํด ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๋ ActivityResultLauncher๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ์ฌ์ฉํด ์กํฐ๋นํฐ๋ฅผ ์์ํจ
SignInActivity : ๋ก๊ทธ์ธ ํ๋ฉด
SignUpActivity : ํ์๊ฐ์
ํ๋ฉด
class SignInActivity : AppCompatActivity() {
private lateinit var idText: EditText
private lateinit var passwordText: EditText
// [1] ActivityResultLauncher ์ด๊ธฐํ
private val signUpActivityResultLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result -> // [2]
if (result.resultCode == Activity.RESULT_OK) {
val data = result.data
data?.let { //data๊ฐ null์ด ์๋ ๋ ์คํ
val userPassword = it.getStringExtra("userPassword") ?: ""
val userId = it.getStringExtra("userId") ?: ""
idText.setText(userId)
passwordText.setText(userPassword)
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sign_in)
idText = findViewById(R.id.signInIdEditText)
passwordText = findViewById(R.id.signInPasswordEditText)
val loginBtn = findViewById<Button>(R.id.signInLoginBtn)
val signupBtn = findViewById<Button>(R.id.signInSignUpBtn)
signupBtn.setOnClickListener {
val intent = Intent(this, SignUpActivity::class.java)
signUpActivityResultLauncher.launch(intent)
}
}
}
[1] signUpActivityResultLauncher๋ ActivityResultLauncher ๊ฐ์ฒด
[2] result๋ ActivityResult ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์ ์ด๋ฆ์ผ๋ก, ์ฌ๊ธฐ์ resultCode์ data๋ฅผ ํตํด ์กํฐ๋นํฐ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌ
class SignUpActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sign_up)
val nameEditText = findViewById<EditText>(R.id.signUpNameEditText)
val idEditText = findViewById<EditText>(R.id.signUpIdEditText)
val passwordEditText = findViewById<EditText>(R.id.signUpPasswordEditText)
val signupBtn = findViewById<Button>(R.id.SignUpSignUpBtn)
signupBtn.setOnClickListener {
val userName = nameEditText.text.toString()
val userId = idEditText.text.toString()
val userPassword = passwordEditText.text.toString()
// [1]
val resultIntent = Intent().apply {
putExtra("userName", userName)
putExtra("userId", userId)
putExtra("userPassword", userPassword)
}
setResult(Activity.RESULT_OK, resultIntent)
finish()
}
}
}
[1] apply๋ก Intent ๊ฐ์ฒด์ ๊ฐ ํค์ ๋ง๋ ๋ฐ์ดํฐ ์ฝ์
: ๋ก๊ทธ์ธ ํ๋ฉด(1) -> ํ์๊ฐ์
ํ๋ฉด(2) -> ๋ก๊ทธ์ธ ํ๋ฉด(3)
์์ ๊ณผ์ ์ ๊ฑฐ์ณค์ ๋ 3ํ๋ฉด์ด ์๋ก ์์ฑ๋์ด์ 1,3์ ๋ค๋ฅธ ํ๋ฉด์ด ๋๋ค.
: ๋ก๊ทธ์ธ ํ๋ฉด(1) -> ํ์๊ฐ์
ํ๋ฉด(2) -> ๋ก๊ทธ์ธ ํ๋ฉด(1)
๊ธฐ์กด์ ์๋ ์กํฐ๋นํฐ์ ๊ฒฐ๊ณผ๊ฐ ๋๋ ค์ค
ex) ์์
1) ํ๋ฉด ์ ํ์ด ๋๋ค๊ฐ ๋ค์ ์ด์ ํ๋ฉด์ผ๋ก ๋์์์ ๋
์คํฌ๋กค ์์น ๊ฐ์ ๊ฒ๋ค์ ์ ์งํด์ผํ ๋ ์ฌ์ฉ
2) ํ์๊ฐ์
๋์ค ์ฃผ์ ์
๋ ฅ ์ฐฝ์ ๋์ ๋ค๊ฐ ๋ค์ ์ด์ ํ๋ฉด์ผ๋ก ๋์์์ ๋
์
๋ ฅํด๋๋ ์ ๋ณด๋ค์ ๊ทธ๋๋ก ๋ณด์กดํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
startActivity๋ณด๋ค ํจ์ฌ ๋ซ๋ค
๋ฒ์ธ
์ฝ๋๋ฅผ ์ง๋ฉด์ let, apply์ ๋ํด ๋ค์ ๊ณต๋ถํ๋ค.
๋๋ ์ด๋ค ๊ฐ๋ ์ ๊ณต๋ถํ ๋ ๋ ํธ๋ฆฌํ๋ค๊ณ ํด๋ ์ด๋ ๋ถ๋ถ ๋๋ฌธ์ ํธ๋ฆฌํ์ง์ ์ ์จ์ผํ๋์ง๋ฅผ ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด ์ดํด๊ฐ ์๋๋ค. ๊ทธ๋์ let๊ณผ apply๋ฅผ ์ผ์ ๋ ์ด๋ค ์ ์ด ํธ๋ฆฌํ์ง ์ ์ด๋ดค๋ค.
- ์์ ์ฝ๋์์ let์ ์ฌ์ฉํ์ ๋
data?.let { data -> //data๊ฐ null์ด ์๋ ๋ ์คํ val userId = data.getStringExtra("userId") ?: "" val userPassword = data.getStringExtra("userPassword") ?: "" idText.setText(userId) passwordText.setText(userPassword) }
- let์ ์ฌ์ฉํ์ง ์์์ ๋
if (data != null) { // data๊ฐ null์ด ์๋ ๋ ์คํ val userId = data.getStringExtra("userId") ?: "" val userPassword = data.getStringExtra("userPassword") ?: "" idText.setText(userId) passwordText.setText(userPassword) }
- ์์ ์ฝ๋์์ apply๋ฅผ ์ฌ์ฉํ์ ๋
val resultIntent = Intent().apply { putExtra("userName", userName) putExtra("userId", userId) putExtra("userPassword", userPassword)
- ์์ ์ฝ๋์์ apply๋ฅผ ์ฌ์ฉํ์ง ์์์ ๋
val resultIntent = Intent() resultIntent.putExtra("userName", userName) resultIntent.putExtra("userId", userId) resultIntent.putExtra("userPassword", userPassword)