Intent()를 사용한 화면 전환을 구현하기 위해서는 뷰바인딩을 가지고 처리를 해줘야 한다.
(뷰바인딩은 Android Studio 3.6 Canary 11이상에서 사용이 가능하다.)
우선, buil.gradle(Module: app)을 열어 아래의 코드를 추가한 후, 반드시 오른쪽 상단의 [Sync Now]로 저장해줘야 한다.
그리고 Intent 기능을 구현하고자 하는 activity에 아래와 같이 작성한다.
1. private lateinit var '변수명' : '생성된 결합클래스 이름'
private lateinit var binding: ActivityMainBinding
※ 생성된 결합클래스 이름은 자동으로 입력되지 않고 직접 입력해줘야 한다.
이름 생성법은 xml이름을 카멜표기법으로 표기하고 끝에 'Binding'을 붙여서 만들어 준다.
예) result_profile.xml → ResultProfileBinding
2. 뷰바인딩 클래스 인스턴스를 설정하기 위해서 Activity의 onCreate() 메서드 안에서
binding = ActivityMainBinding.inflate(layoutInflater) //binding 객체 초기화 : inflate()메서드 호출
var view = binding.root //루트 뷰 참조 가져오기
setContentView(view) // 활성 뷰로 만들기
1) 생성된 뷰바인딩 클래스에 포함된 inflate()메서드 호출 (변수명은 마음대로)
2) getRoot() 메서드를 호출하거나 Kotlin 속성 구문을 사용하여 루트 뷰 참조를 가져옴 (변수명은 마음대로)
3) 루트 뷰를 setContentView()에 전달하여 화면에서 활성 뷰로 만듦
뷰바인딩을 위한 준비 끝.
사용법은 '바인딩 변수명'.'xml에 존재하는 id명' 으로 하면 된다.
binding.btnA.setOnClickListener {
완성 코드 [MainActivity.kt]
package com.eve.intentkt
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import com.eve.intentkt.databinding.ActivityMainBinding
private lateinit var binding: ActivityMainBinding
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater) //binding 객체 초기화 : inflate()메서드 호출
var view = binding.root //루트 뷰 참조 가져오기
setContentView(view) // 활성 뷰로 만들기
binding.btnA.setOnClickListener {
binding.tvSendMsg.setText("글자가 바뀌었어용")
}
}
}
[추가]
1. 뷰바인딩을 사용하고자 하는 모든 Activity에 저렇게 작성해줘야 한다. 상당히 번거로운데 한번에 끝낼 수 있는 방법이 없을까?
2. inflate() 메서드를 사용해서 객체를 초기화 시킬때, MainActivity와 SubActivity 둘다 변수명을 binding으로 동일하게 주었는데 에러없이 원활하게 돌아갔었다. Activity마다 다른 바인딩명을 사용할 필요는 없을 것 같다.
반응형
'앱 개발' 카테고리의 다른 글
[firebase] While trying to resolve module idb from file.. Indeed, none of these files exist: 500 에러 (expo) (0) | 2022.05.23 |
---|---|
[react-native] TouchableOpacity안에 Text 가운데 정렬하기 (0) | 2022.05.09 |
[내일배움단] 앱개발 종합반 1주차 개발일지 (0) | 2022.05.04 |
[android] kotlin button background 색상 변경 (1) | 2022.01.07 |
[android] 토스트 Toast 메시지 출력 에러 (0) | 2022.01.06 |
댓글