일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- CustomView
- CollapsingToolbarLayout
- HTTP
- kotlin
- ViewModel
- AppBarLayout
- sqlite
- activity
- 알림
- lifecycle
- onLayout
- hilt
- 코틀린
- LiveData
- notification
- room
- 안드로이드
- onMeasure
- 백준
- View
- Behavior
- BOJ
- DataBinding
- 알고리즘
- recyclerview
- Algorithm
- Navigation
- Android
- CoordinatorLayout
- Coroutine
- Today
- Total
목록Android (안드로이드)/Databinding (6)
개발일지
문자열 서식 Android에서 UI와 관련된 문자열 리소스는 string.xml에 저장합니다. UI와 리소스를 분리하면서 다중 언어를 쉽게 지원할 수 있고 불필요한 코드의 중복을 줄일 수 있습니다. 정적 리소스 Hello World 위와 같은 정적인 문자열 리소스는 Java에서 getString과 XML에서 @string/hello_world로 사용할 수 있습니다. Hello World getString(R.string.hello_world) android:text="@string/hello_world" 동적 리소스 OOO님 안녕하세요. 위와 같이 동적인 문자열 리소스는 Java에서 getString과 XML에서는 Databinding으로 사용할 수 있습니다. %s님 안녕하세요 getString(R.st..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/MH3IE/btq21N6ErKU/kqWIYxRaGKlduYbjXuI9hK/img.png)
양방향 데이터 바인딩 EditText에서 android:text="@{string}" 이런식으로 바인딩 하는 것을 단방향 바인딩이라고 한다. (Data를 EditText에 일방적으로 바인딩하는 개념) 양방향 데이터 바인딩은 EditText, RadioButton, DataPicker등 데이터가 변하는 View가 역으로 Data로 바인딩하는 것이다. * 기본으로 지원하는 Two-Way-Databinding LifeCycleOwner 설정하기 binding.lifecycleOwner = lifecycleOwner ViewModel 만들기 원래 양방향 데이터 바인딩은 ObservableField를 통해 타입을 정해서 가능했지만 LiveData도 지원하기 시작했다. 이번 예제에서는 LiveData를 통해 양방향..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cYsVDi/btqUSqKfGeB/4AgxEpF3fweaKQao0LrO6K/img.png)
BindingAdapter Databinding을 사용하다 보면 기본적으로 제공하는 수식으로 표현 못하는 경우가 생긴다. (Glide를 사용한 ImageView 업데이트) BindingAdapter를 정의하면 해결할 수 있다. BindingAdapter object BindingAdapter { @JvmStatic @BindingAdapter(value = ["imageUrl", "error"], requireAll = false) fun loadImage(view: ImageView, url: String?, error: Drawable?) { Glide.with(view).load(url).error(error).into(view) } } @JvmStatic : Java에서도 호환을 도와주는 코드(J..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cWncfT/btqT90F5UOb/qK3PK2Eri8tBXpca0rfy60/img.png)
Databinding에서 제공하는 수식으로 XML에서 간단한 수식을 처리하여 Java나 Kotlin의 코드를 줄일 수 있고, 코드의 유지보수성을 높일 수 있습니다. import Java에서 import와 비슷한 의미로 변수를 선언할 때 사용한다. bind include를 사용하여 다른 layout을 포함할 때 다른 layout에 데이터를 결합하는 방법. => merge에서는 사용할 수 없다. default 데이터를 결합하기 전에 표시할 값을 선택한다. => Databinding을 사용하면 Design을 미리 볼 수 없는데 Design을 미리 볼 때도 사용할 수 있다. 문자열 리터럴 Databinding에서 문자열을 사용할 때 android:text='@{map["firstName"]}' android:t..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/5EkZp/btqUeWXctSB/kW9XZKhPdGdhf6jlaV0u1K/img.png)
바인딩 객체 Databinding을 사용해서 Data를 결합하기 위해서는 DataBindingUtil이나 바인딩 클래스를 사용해서 바인딩 객체를 얻어야한다. Activity DataBindingUtil.setContentView를 사용해서 얻는다. abstract class BaseActivity(private val layoutId: Int) : AppCompatActivity() { protected lateinit var binding: VB override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) init() } protected open fun init() { initViewDataBinding(..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b6LQXi/btqT6IMZSTK/DzsxYoPdz02h66kv8NlnK1/img.png)
Databinding Java나 Kotlin으로 View를 업데이트하는 방식이 아닌 XML에서 View를 업데이트 하는 방식이다. View를 업데이트하는 코드를 분리하면서 코드의 간결함과 유지보수성이 좋고 앱의 성능이 향상된다. build.gradle(module) plugins { ... id 'kotlin-kapt' } android { ... buildFeatures { dataBinding = true } } holder_movie 기본적으로 layout안에 data와 view를 넣는다. data안에는 XML에서 사용할 변수를 선언할 수 있다. variable로 변수를 선언하여 name으로 이름을 정하고 type으로 변수의 타입을 정한다. 선언한 변수를 사용하려면 @{}로 변수를 사용한다. 데이터..