인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

지현명님의 프로필 이미지

작성한 질문수

모던 안드로이드 - 코틀린과 Jetpack 활용

[Kotlin] DataBinding

Kotlin DataBinding

작성

·

203

1

MainViewModel에서 
var todos: LiveData<List<Todo>>
init {
todos = getAll()
}

이 부분을 프로퍼티로 변경하면 될 줄 알았는데
안됩니다.
val todos: LiveData<List<Todo>>
get() {
return getAll()
}
프로퍼티를 사용 할 수 있는 방법이 궁금합니다.

답변 7

1

지현명님의 프로필 이미지
지현명
질문자

val todos = db.todoDao().getAll()
더 심플한 방법을 알려 주셔서 감사합니다.

1

오준석님의 프로필 이미지
오준석
지식공유자

아. 제가 착각했네요. getter로 리턴하도록 하면 데이터바인딩으로 반영이 안 되네요.

1

오준석님의 프로필 이미지
오준석
지식공유자

이상하네요. 저도 혹시나 해서 제공해 주신 getter 구현해서 확인해 봤는데 잘 동작했습니다. 혹시 액티비티 쪽에서 todos를 바라보도록 수정하는 것을 잊거나 하지는 않으셨을까요?

1

오준석님의 프로필 이미지
오준석
지식공유자

getAll() 메서드는 없애도 되고요. 다음과 같이 프로퍼티로 바로 접근하시면 됩니다.

val todos = db.todoDao().getAll()

제시해 주신 getter 코드도 잘 동작할 것 같은데요

0

지현명님의 프로필 이미지
지현명
질문자

<TextView
android:id="@+id/result_text"
android:text="@{viewModel.todos.toString()}"

강의에서 사용한 성공했던 소스는 수정하지 않고
MainViewModel에서 프로퍼티만 추가했습니다.

0

지현명님의 프로필 이미지
지현명
질문자

메뉴얼을 보니 LiveData가 BaseObservable의  기능을 포함하고 있었네요. 

0

지현명님의 프로필 이미지
지현명
질문자

BaseObservable를 사용해야 하는건가 고민하고 있었는데 답변을 주셨네요. 감사합니다. 

val todos: LiveData<List<Todo>>
get() {
return getAll()
}
이렇게 하면 에러는 안나는데 화면에 반응이 없습니다.