DataBinding 사용해보기
android {
...
dataBinding {
enabled = true
}
}
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
에 연결 시킬 뷰모델의 경로를 넣으시면 됩니다.
class MainViewModel : ViewModel() {
private val _exText = MutableLiveData<String>()
val exText get() = _exText
fun setText(str: String){
_exText.value = str
}
}
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파일에서 감지를 하고 화면에 업데이트 시키는 것을 알 수 있습니다.