Я отказываюсь от ответа на стекопоток https://stackoverflow.com/a/34817565/4052264, чтобы связать объект данных с пользовательским представлением. Однако после того, как все настроено, мое представление не обновляется данными, и вместо этого TextView
остается пустым.
Вот мой код (упрощенно для удобства здесь):
activity_profile.xml
<layout xmlns...>
<data>
<variable name="viewModel" type="com.example.ProfileViewModel"/>
</data>
<com.example.MyProfileCustomView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:viewModel="@{viewModel}">
</layout>
view_profile.xml
<layout xmlns...>
<data>
<variable name="viewModel" type="com.example.ProfileViewModel"/>
</data>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{viewModel.name}">
</layout>
1012 *
*
MyProfileCustomView.kt
:
class MyProfileCustomView : FrameLayout {
constructor...
private val binding: ViewProfileBinding = ViewProfileBinding.inflate(LayoutInflater.from(context), this, true)
fun setViewModel(profileViewModel: ProfileViewModel) {
binding.viewModel = profileViewModel
}
}
ProfileViewModel.kt
class ProfileViewModel(application: Application) : BaseViewModel(application) {
val name = MutableLiveData<String>()
init {
profileManager.profile()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(::onProfileSuccess, Timber::d)
}
fun onProfileSuccess(profile: Profile) {
name.postValue(profile.name)
}
}
Все работает нормально, API-вызов к profileManager.profile()
выполнен успешно, класс ViewProfileBinding
успешно создан с правильной настройкой. Проблема в том, что когда я делаю name.postValue(profile.name)
, представление не обновляется со значением profile.name