728x90
우선 결과물을 보여주자면,
이런 메인 화면이 실행된다. 여기서 서브화면으로 이동 버튼을 클릭하면
메인화면 textview에 적혀있던 문자가 크게 변경되어 화면에 나타나는 것을 확인할 수 있다.
따라서 이는 xml도 2개, Activity도 2개가 필요하다
1. 실행 첫화면 xml 코드
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_sendMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="서브화면으로 이동"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_sendMsg" />
</androidx.constraintlayout.widget.ConstraintLayout>
2. 실행 첫화면 Activity 코드
package com.example.myapplication
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.myapplication.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
//바인딩 객체 선언
private var mBinding: ActivityMainBinding ?= null
private val binding get() = mBinding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//바인딩 초기화
mBinding = ActivityMainBinding.inflate(layoutInflater)
// 생성된 뷰 액티비티에 표시시
setContentView(binding.root)
binding.btnA.setOnClickListener {
//다음화면으로 이동하기 위한 인텐트 객체 생성
val intent = Intent(this, SubActivity::class.java)
//HelloWorld라는 텍스트 값을 담음
intent.putExtra("msg", binding.tvSendMsg.text.toString())
startActivity(intent) //intent에 저장되어 있는 엑티비티 쪽으로 이동한다
finish() //자기 자신 액티비티 파괴
}
}
override fun onDestroy() {
mBinding = null
super.onDestroy()
}
}
3. 버튼 클릭 후 이동되는 xml 코드
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SubActivity">
<TextView
android:id="@+id/tv_getMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="서브액티비티"
android:textSize="36dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
4. 버튼 클릭 후 이동되는 Activity 코드
package com.example.myapplication
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.myapplication.databinding.ActivitySubBinding
class SubActivity : AppCompatActivity() {
private var mBinding: ActivitySubBinding ?= null
private val binding get() = mBinding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView(R.layout.activity_sub)
//바인딩 초기화
mBinding = ActivitySubBinding.inflate(layoutInflater)
// 생성된 뷰 액티비티에 표시시
setContentView(binding.root)
//intent에 넘겨진 객체중에 msg가 있다면
if(intent.hasExtra("msg")) {
//서브 액티비티의 존재하는 텍스트뷰에 main에 있는 메세지가 넘겨져 옴
binding.tvGetMsg.text = intent.getStringExtra("msg")
}
}
}
위의 글은 '홍로이드' 님의 유튜브 강좌를 보고 공부한 뒤,
다시 코드를 작성해본 뒤 뷰바인딩으로 변환시킨 코드입니다.
728x90
'ⓢⓣⓤⓓⓨ > ⓐⓝⓓⓡⓞⓘⓓⓢⓣⓤⓓⓘⓞ' 카테고리의 다른 글
[Kotlin] 리사이클러 뷰 (RecyclerView) (0) | 2021.08.25 |
---|---|
[Kotlin] 네비게이션 뷰 (Navigation View) (0) | 2021.08.24 |
[Kotlin] 리스트 뷰 (ListView) (0) | 2021.08.23 |
[Kotlin] 뷰바인딩 (코틀린 시작 전 알아야 할 점) (0) | 2021.08.22 |
Unresolved reference 오류 (0) | 2021.08.18 |
댓글