1/1 과제 파트(보관함) 서버데이터 정리

Databinding

이번 앱잼전에는 평소에는 ViewBinding을 통해서 접근했습니다.

binding.tvOptProTitle.visibility = View.GONE

하지만, Databinding을 사용하게 되면 클래스에서

title = option.title
if (option.advantage == "") {
    tvOptProTitle.visibility = View.GONE
} else {
    advantage = option.advantage
}
if (option.disadvantage == "") {
    tvOptConTitle.visibility = View.GONE
} else {
    disadvantage = option.disadvantage
}
if (option.percentage == null) {
    tvOptPercent.visibility = View.GONE
} else {
    percentage = option.percentage
}

그렇게 된다면, 클래스에서 너무 사용할 코드가 많아지게 되기때문에, 문제가 생기게됩니다, 그래서 이번 프로젝트에서 Viewbinding과 함께 Databinding을 사용하였습니다.

ViewBinding binding.tvWorry.text = worryTitle

Databinding android*:text*="@{worryTitle}"

그중에서도 특수문자를 사용하고 싶으면 android:text="@{roomdata.people + ':' + roomdata.people}"

@{이름 : + userdata.id} 이런식으로 사용하기도 합니다.

BindingAdapter

이러한 형식말고도 BindingAdapter를 작성할 수 있기도 하는데 BindingAdapter를 사용하여 ViewBinding을 통해서 직접적으로 컴포넌트를 연결시켰지만 BindingAdapter와 위에서 말한 DataBindingd을 같이 사용하면

@BindingAdapter("app:decide_selected")
fun AppCompatButton.selected(sel: Boolean) {
    if (sel) {
        this.background = this.context.getDrawable(R.drawable.shape_rectangle_orange1_fill_30)
        this.setTextColor(this.context.getColor(R.color.white))
    } else {
        this.background = this.context.getDrawable(R.drawable.shape_rectangle_blue3_stroke_1_30)
        this.setTextColor(this.context.getColor(R.color.gray_2))
    }
}

*app:decide_selected*="@{selected}"

다음과 같이 바인딩어댑터를 사용하여서 속성에 @{변수} 형식으로 값을 전달해주기도 합니다.