# 1. Language/🔰 Kotlin

[Android/Kotlin] 블루투스 목록 PJT -1. 데이터 바인딩하여 버튼 클릭 시 Toast메세지 출력하기

둥굴둥굴둥굴레차 2022. 9. 2. 11:24

선행작업

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()
        }

    }
}