반응형
activity_main.xml
activity_sub.xml
viewBinding 설정
예시1) 버튼 클릭시 메인 액티비티에서 서브 액티비티로 전환
MainActivity
class MainActivity: AppCompatActivity() {
val binding by lazy { ActivityMainBinding.inflate(layoutInflater)}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
/*사용할 액티비티 타입정보를 명시적으로 작성하여 Intent 생성
this : 자기자신(여기서는 MainActivity), 전환 할 class*/
val intent = Intent(this, SubActivity::class.java)
/*startActivity에 intent를 전달하면 작성 된 intent를 해석하여 실행할 액티비티를 결정한다.
이 때, 사용할 액티비티 정보와 데이터가 담긴 인텐트를 함께 전달해야 한다.*/
binding.btnStart.setOnClickListener{
startActivity(intent)
}
}
예시 2) 버튼 클릭 시 메인 액티비티에서 서브 액티비티로 데이터 전달하며 전환
MainActivity
class MainActivity: AppCompatActivity() {
val binding by lazy { ActivityMainBinding.inflate(layoutInflater)}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
/*Intent 생성*/
val intent = Intent(this, SubActivity::class.java)
/* 인텐트 내부에는 번들(Bundle)이라는 데이터 저장 공간이 있어서
번들에 데이터를 담아 전달할 수 있다. 인텐트 내부 번들에 값을 담을 때는
putExtra 메소드를 이용하여 Key, value 방식으로 값을 담는다(Map과 유사)*/
intent.putExtra("from1", "Hello Greedy")
intent.putExtra("from2", 2022)
binding.btnStart.setOnClickListener{
startActivity(intent)
}
}
}
SubActivity에 하고자 하는 동작 작성
class SubActivity : AppCompatActivity() {
val binding by lazy { ActivitySubBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
/* 메인에서 인텐트로 담아준 값 가져와서 to1,to2에 담기
intent는 액티비티의 기본 프로퍼티이기 때문에 전달 된 intent를 바로 호출해서 사용 가능*/
binding.to1.text = intent.getStringExtra("from1")
/* 문자열의 경우 값이 없으면 blank로 처리 되지만, 숫자의 경우 defaultValue를 지정해주어야 한다.*/
binding.to2.text = "${intent.getIntExtra("from2", 0)}"
}
}
예시2) 실행 결과
반응형
예시3) 버튼 클릭 시 메인 액티비티에서 서브 액티비티로 데이터 전달하며 전환되고, 서브 액티비티에서 메세지 입력 후 다시 메인 액티비티로 전환
MainActivity
class MainActivity: AppCompatActivity() {
val binding by lazy { ActivityMainBinding.inflate(layoutInflater)}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
val intent = Intent(this, SubActivity::class.java)
intent.putExtra("from1", "Hello Greedy")
intent.putExtra("from2", 2022)
/* result가 존재하는 activity 동작시 사용할 resultListener 정의 */
val resultListener = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
/*result의 resultCode RESULT_OK라면*/
if(it.resultCode == Activity.RESULT_OK){
/* it.data 자체가 리턴 받은 intent 객체이다(it은 result)
retrunValue라는 key 값으로 intent에 전달 된 값을 message로 꺼내고*/
val message = it.data?.getStringExtra("retrunValue")
/* MainActivity 위에 짧은 길이로 전달받은 message를 Toast 위젯으로 보여준다.*/
Toast.makeText(this@MainActivity, message, Toast.LENGTH_SHORT).show()
//-> context 위에 어떤 텍스를 기반으로 짭게 혹은 길게 설정을 가진 토스트 객체를 만들어서 보여주세요
}
}
/* resultListener를 이용한 subActivity 동작 */
binding.btnStart.setOnClickListener{
resultListener.launch(intent)
// 시작 버튼을 클릭했을 때 정의한 resultListener를 통해서 인텐드를 가지고 런처 합니다.
}
}
SubActivity
class SubActivity : AppCompatActivity() {
val binding by lazy { ActivitySubBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.to1.text = intent.getStringExtra("from1")
binding.to2.text = "${intent.getIntExtra("from2", 0)}"
/* 메인 액티비티로 이동시키기 위해서는 다시 액티비티를 실행하는 것이 아니라
현재 액티비티를 종료시키면서 돌아간다. */
binding.btnClose.setOnClickListener{
/* 액티비티 종료 시 리턴해 줄 intent 생성*/
val returnIntent = Intent()
returnIntent.putExtra("returnValue", binding.editMessage.text.toString())
/* 클로즈가 동작하게 되면 담고 싶은 값을 작성
키값(MainActivity에서 전달한 키값)과 전달할 메세지를 인텐트안에 벨류 값으로 담겠다*/
/* 결과 상태 코드와 인텐트를 넣어 리턴할 값을 셋팅한 뒤 액티비티를 종료한다.*/
setResult(RESULT_OK, returnIntent) // RESULT_OK : 결과 상태코드
finish() //전달해줄 값이 있을 경우 intent작성 필요, 전달 값이 없으면 finish()만 작성
}
}
}
예시3) 실행 결과
반응형
'프로그래밍 > Kotlin' 카테고리의 다른 글
[코틀린/안드로이드] CustomAdapter 활용하여 RecyclerView 사용하기 (0) | 2022.10.24 |
---|---|
[코틀린/안드로이드] Spinner 사용하기 (simple_list_item_1, Adapter) (0) | 2022.10.24 |
[코틀린 / Kotlin] 컬렉션 Set , Map (mutableSetOf() , Pair) (0) | 2022.10.20 |
[코틀린 / Kotlin] 컬렉션 _ List (add, remove, removeAt, contains, listOf ...) (0) | 2022.10.20 |
[코틀린 / Kotlin] 상속과 오버라이딩 (0) | 2022.10.20 |