MainActvity2.kt
package com.example.ex_intent
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
// 이동 버튼이 클릭이되면 액티비티(sub) 전환 + 입력한 값
val btnMove2 : Button = findViewById<Button>(R.id.btnMove2)
val etInput2 : EditText = findViewById<EditText>(R.id.etInput2)
btnMove2.setOnClickListener {
// 입력한 값 가져오기
val input = etInput2.text.toString()
// intent 생성
val intent: Intent = Intent(this,subActivity2::class.java)
intent.putExtra("data",input)
// FLAG 설정 (생략)
// intent에 데이터 추가
// intent.putExtra("data",input)
// intent.putExtra("data2",100)
// intent 활용 액티비티 전환
// startActivity(intent)
// 단방향으로 실행 (main -> sub, 따로 결과값은 받아 올수가 없음)
// startActivity(intent)
// => 화면 간의 이동은 필요하지만 새로운 액티비티로부터 결과를 받지 않을 때 사용
// 양방향
// startActivityForResult()
// => 새로운 액티비티를 시작하면서 해당 액티비티로부터 결과를 받아와야 할 때 사용
// ex) 카메라 액티비티를 새롭게 시작한 후 촬영한 사진의 경로를 받아와야 할때!
// => 권장하고 있지 않음 => registerForActivityResult 구현해서 사용!
mainLauncher.launch(intent)
}
}
// registerForActivityResult 구현 위치
val mainLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()){
result: ActivityResult ->
Log.d("result", result.resultCode.toString())
if(result.resultCode == Activity.RESULT_OK) {
Toast.makeText(this,"성공!", Toast.LENGTH_SHORT).show()
}
}
}
subActivity.kt
package com.example.ex_intent
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
class subActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sub2)
val tvInput:TextView = findViewById<TextView>(R.id.tvInput2)
val btnMain:Button = findViewById<Button>(R.id.btnMain)
// MainActivity에서 사용한 intent 가져오기
val intent: Intent = getIntent()
val result = intent.getStringExtra("data")
tvInput.text = result
btnMain.setOnClickListener {
// 버튼이 클릭되면 결과값을 가지고 메인으로 돌아가기!
// 카메라 앱(SUB 액티비티)이 실행되었다고 가정
// RESULT_OK : 성공적으로 사진 촬영을 했을 때
// RESULT_CANCELED : 사용자가 사진 촬용을 하지 않았을 때
setResult(RESULT_OK, intent)
finish() // 현재 액티비티를 종류 후 호출한 액티비티로 돌아가기
}
}
}
