DataBinding

BongKu·2023년 12월 29일
0

Android

목록 보기
27/30

DataBinding 사용해보기

  • build.gradle 세팅

android {
        ...
        dataBinding {
            enabled = true
        }
    }
    
  • xml파일 레이아웃으로 감싸기


    위와 같이 Convert to data binding layout 을 누르면 자동으로 변경 가능합니다.
<?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"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

데이터 연결 시켜주기.

  <data>
      <variable
          name="viewModel"
          type="com.example.exdatabinding.MainViewModel" />
  </data>

...
<TextView
        ...
        android:text="@{viewModel.exText}"
        .../>

저는 ViewModel과 레이아웃파일을 연결하고 TextView에서 ViewModel의 exText 변수를 사용하고 있스빈다.
name은 레이아웃 안에서 사용할 속성이고 type에 연결 시킬 뷰모델의 경로를 넣으시면 됩니다.

MainViewModel.kt

class MainViewModel : ViewModel() {
    private val _exText = MutableLiveData<String>()
    val exText get() = _exText

    fun setText(str: String){
        _exText.value = str
    }
}

MainActivity.kt

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    private lateinit var mainViewModel: MainViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        mainViewModel = ViewModelProvider(this).get(MainViewModel::class.java)
        setUpBinding()
        mainViewModel.setText("Databinding 예제")
    }

    private fun setUpBinding() {
        binding = ActivityMainBinding.inflate(layoutInflater)
        binding.viewModel = mainViewModel
        setContentView(binding.root)
    }
}

다음과 같이 레이아웃파일에 있는 viewModel과 MainViewModel을 연결 시켜 준 것을 알 수 있습니다.

binding.viewModel = mainViewModel

이렇게 하면 MainActivity 에서 viewModel의 setText에 전달한 변수로 인해 viewModel의 exText 변수가 변경이 되면 xml파일에 text를 변경시키는 작업 없이도 자동으로 변수의 값이 변경된 것을 xml파일에서 감지를 하고 화면에 업데이트 시키는 것을 알 수 있습니다.

profile
화이팅

0개의 댓글