IDE & Framework/Android
AAC MVVM - (2)Data binding
Greensky0026
2021. 10. 17. 20:27
반응형
앱단위 gradle 설정
//build.gradle
android{
//...
dataBinding{
enabled = true
}
}
//...
}
databinding을 사용할 xml을 layout으로 감싸고 data태그 추가
//xml
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.example.dataBindingPractice.data.User" />
</data>
<LinearLayout
...
</LinearLayout>
</layout>
→ data 태그의 user변수는 레이아웃 내에서 사용할 수 있는 속성의 이름이고 type은 사용할 속성이다.
layout 내에서 @{} 구문을 사용해서 기록할 수 있다.
ex) @{user.firstName}
data binding을 사용할 수 있도록 class에 입력
//결합
ActivityMainBinding binding
@Override
protected void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
binding = dataBindingUtil.setContentView(this, R.layout.activity_main);
User user = new User();
binding.setUser(user);
}
...
bindingAdpater로 직접 레이아웃에 속성을 부여할 수도 있다.
//BindingAdapter.kt
object BindingAdapters {
fun setVisible(view: View, isVisible: Boolean){
view.visibility = if (isVisible) View.VISIBLE else View.GONE
}
}
bindingAdpater 사용 예제
//MainActivity.kt
val liveVisible = MutableLiveData<Boolean>()
override fun OnCreate(saveInstanceState: Bundle){
...
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.apply {
lifecycleOwner = this@MainActivity
activity = this@MainActivity
btnChange1.setOnClickListener{
liveVisible.value = true
}
btnChange2.setOnClickListener {
liveVisible.value = false
}
}
}
//activity_main.xml
<layout...
//...
<data>
<variable
name="activity"
type="com.example.mvvmpractice.MainActivity" />
</data>
//...
<androidx.constraintlayout.widget.ConstraintLayout...
//...
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="내가 사라져 볼게"
//...
app:visible="@{activity.liveVisible}"/>
<Button
android:id="@+id/btn_change1"
//...
/>
<Button
android:id="@+id/btn_change2"
//...
/>
btn1을 누르면 visible이 true로, btn2를 누르면 visible이 false가 되게 된다.
반응형