선행작업
XML에 간단한 버튼만 만들어 주었다.
Step1. 데이터 바인딩 진행
1. app/build.gradle에 dataBinding 요소 추가
android {
...
dataBinding{
enabled = true
}
}
2. dataBinding 사용하려는 XML파일의 소스를 <layout>태그로 감싸주기
- 주의할 점 : xml 버전과 인코딩 타입을 명시한 태그가 항상 제일 먼저 와야한다
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageButton
android:id="@+id/reconnectBtn"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginTop="472dp"
android:background="@drawable/btn_check"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
이제 각 레이아웃 파일에 대해 binding class가 자동으로 생성이 되는데, 이 때 이름은 data binding을 사용하는 클래스의 이름에 따라 생성된다.
예) 자동으로 생성되는 activity_main.xml의 binding class의 이름 : ActivityMainBinding
3. Activity로 이동하여 ActivityMainBinding클래스를 사용하여 Binding객체를 생성
private lateinit var binding: ActivityMainBinding
4. onCreate()안 setContentView()대신 DataBindingUtil.setContentView()사용하여 binding변수에 할당
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
5. 레이아웃의 id를 가져와 button에 onClickListener를 달아주자
그리고 나는 잘 작동하는지 보고싶어서 Toast메세지를 띄우는 코드를 setOnClickListener에 넣어주었다.
binding.reconnectBtn.setOnClickListener {
Toast.makeText(applicationContext, "I'm your Android!", Toast.LENGTH_SHORT).show()
}
전체코드
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageButton
android:id="@+id/reconnectBtn"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginTop="472dp"
android:background="@drawable/btn_check"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
MainActivity.kt
package org.techtown.bluetoothforphiaton
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.databinding.DataBindingUtil
import org.techtown.bluetoothforphiaton.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
//ActivityMainBinding -> XML파일에 <layout>태그로 선언된 곳을 의미! 자동으로 만들어지는 클래스
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.reconnectBtn.setOnClickListener {
Toast.makeText(applicationContext, "I'm your Android!", Toast.LENGTH_SHORT).show()
}
}
}
'# 1. Language > 🔰 Kotlin' 카테고리의 다른 글
Webview를 사용해 웹페이지 로드하는 방법 (0) | 2022.09.22 |
---|---|
Android개발 시 데이터 바인딩이란? (0) | 2022.09.03 |
Kotlin # Companion Object (0) | 2022.08.01 |
Kotlin # Android 전체에서 context에 접근할 수 있도록 만들기 (0) | 2022.08.01 |
Kotlin # Context (0) | 2022.07.26 |