반응형
데이터와 뷰를 연결하는 작업을 레이아웃에서 할 수 있게 해주는 라이브러리
findViewById<TextView>(R.id.sample_text).apply {
text = viewModel.userName
}
뷰 모델에서 가져온 유저네임을 가져오는 코드를
<TextView
android:text="@{viewmodel.userName}" />
레이아웃에서 직접 결합할 수 있게 해준다.
- 코드가 간결하고 쉽게 읽고 유지 관리 또한 쉬워진다.
- 앱 성능이 향상되며 메모리 누수 및 null 포인터 예외를 방지할 수 있습니다.
dataBinding{
enabled true
}
앱 수준 build.gradle 파일을 열어 안드로이드에 활성화 시켜준다.
package com.anushka.bindingdemo1
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.anushka.bindingdemo1.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.submitButton.setOnClickListener {
displayGreeting()
}
}
private fun displayGreeting() {
binding.apply {
greetingTextView.text = "Hello! "+ nameEditText.text
}
}
}
DataBindingUtil의 setContentView 함수를 사용하여 레이아웃의 Binding 개체를 가져옵니다.
데이터를 xml 레이아웃에 전달하고 직접 사용하는 방법
데이터 클래스를 만든후 xml에서 variable에 만든 데이터클래스를 연결한 후 type을 설정하고 레이아웃에 @{} 구문으로 작성한다.
package com.anushka.bindingdemo3
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.anushka.bindingdemo3.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
binding.student = getStudent()
}
private fun getStudent():Student{
return Student(1,"Viva","Viva@gmail.com")
}
}
로컬 데이터베이스 또는 웹 API에서 데이터를 가져오고 반환할때 사용하면 좋을것 같다.
잘 적용 되었다.
반응형
'Android' 카테고리의 다른 글
[Android] LiveData (0) | 2023.02.06 |
---|---|
[Android] ViewModel (0) | 2023.02.04 |
무료 아이콘, BGM, 이미지 제공 사이트 (0) | 2022.12.17 |
Android - Activity 생명주기 (0) | 2022.11.23 |
Android - Layout (0) | 2022.11.11 |