- 레이아웃의 UI 구성요소를 앱의 데이터 소스와 결합할 수 있는 지원 라이브러리입니다.
- 레이아웃 파일에서 구성요소를 결합하면 활동에서 많은 UI 프레임워크 호출을 삭제할 수 있어 파일이 더욱 단순화되고 유지관리 또한 쉬워집니다. 앱 성능이 향상되며 메모리 누수 및 null 포인터 예외를 방지할 수 있습니다.
- 데이터 변경을 쉽게 식별하기 위한 클래스 및 메서드를 제공합니다. 기본 데이터 소스가 변경될 때 UI 새로고침에 관해 신경쓰지 않아도 됩니다. 변수 또는 속성을 식별 가능하게 만들 수 있습니다. 라이브러리를 통해 객체, 필드 또는 컬렉션을 식별 가능하게 만들 수 있습니다.
- 레이아웃의 변수 및 뷰에 액세스하는 데 사용되는 결합 클래스를 생성합니다. 이 페이지는 생성된 결합 클래스를 사용하고 맞춤설정하는 방법을 보여줍니다.
- BindingAdapter를 사용하여 적절한 프레임워크를 호출하여 값을 설정하는 작업을 담당합니다.
- UI 개발을 한층 단순화할 수 있습니다.
- Two - Way DataBinding을 지원합니다. 이 결합 유형에 사용된 표기법은 속성의 데이터 변경사항을 받는 동시에 속성의 사용자 업데이트를 수신 대기하는 기능을 지원합니다.
App 수준 Build Gradle에 DataBinding 라이브러리 추가
android {
...
dataBinding {
enabled = true
}
}
//Gradle 4.0.0 이상
android {
...
buildFeatures {
dataBinding true
}
}
XML에서 DataBinding 사용 예시
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="activity"
type="com.example.databinding_exam.activity.MainActivity" />
<variable
name="vm"
type="com.example.databinding_exam.activity.ActivityViewModel" />
<variable
name="user"
type="com.example.databinding_exam.model.User" />
</data>
<ConstraintLayout... /> <!-- UI layout's root element -->
</layout>
Binding data
//for Activity
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//아래와 같이 두가지 방법이 사용가능하다.
//binding = ActivityMainBinding.inflate(layoutInflater)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
}
}
//for Fragment,ListView,RecyclerView
class MainFragment : Fragment() {
private lateinit var binding: FragmentMainBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false)
return binding.root
}
}
사용예시
//Activity에서 binding 변수에 data 할당
override fun onCreate() {
binding.activity = this@Mainactivity
binding.vm = ViewModel()
binding.user = User("donghwan", 0)
}
//XML에서 onClick 사용 예시
<Button
android:id="@+id/btn_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick='@{()->activity.buttonClick(user,1)}'
android:text="age change 1" />
728x90
반응형
'Domain > Android' 카테고리의 다른 글
[Android] MediaStore ( Android 11 / Android 버전 대응 / Storage 정책 ) (0) | 2021.04.23 |
---|---|
[Android] 위치정보 권한 ( Android10 Location / Location Permission / COARSE_LOCATION / FINE_LOCATION / BACKGROUND_LOCATION ) (0) | 2021.04.23 |
[Android] MVC vs. MVP vs. MVVM (0) | 2020.09.21 |
[Android] Context란? (0) | 2020.09.08 |
[Android] Android Pie Http 허용 (0) | 2020.06.05 |
댓글