xml привязка данных прервана после notifyPropertyChanged - PullRequest
0 голосов
/ 17 декабря 2018

Я использую библиотеку привязки данных Android и у меня следующий сценарий

Мой класс выглядит примерно так:

class DummyClass : BaseModel() {
 private var model: DummyModel? = null
 private var profileImage: ImageModel? = null

 @Bindable
 fun getModel() : DummyModel? {
    return model
 }

 fun setModel(model: DummyModel?) {
    this.model = model
    notifyPropertyChanged(BR.model)
 }

 @Bindable
 fun getProfileImage() : ImageModel? {
    return profileImage
 }

 fun setProfileImage(imageModel: ImageModel?) {
    this.profileImage = imageModel
    notifyPropertyChanged(BR.profileImage)
 }
}

Моя ViewModel:

class MyViewModel(application: Application, id : Long) : BaseViewModel(application) {
private val mObservableDummy = MutableLiveData<DummyClass>()
private val mObservableManufacturers = MutableLiveData<List<ManufacturerModel>>()
private val mObservableManufacturer = MutableLiveData<ManufacturerModel>()
private val mObservableModels = MutableLiveData<List<DummyModel>>()

val dummy: LiveData<DummyClass>
    get() = mObservableBike

val manufacturers: LiveData<List<ManufacturerModel>>
    get() = mObservableManufacturers

val manufacturer: LiveData<ManufacturerModel>
    get() = mObservableManufacturer

val models: LiveData<List<DummyModel>>
    get() = mObservableModels

private fun loadModelsForManufacturer() {
    val models = modelService.findModelsByManufacturerId(manufacturer.value?.manufacturerId ?: 0).sortedBy { it.name }
    mObservableModels.value = models
}

/**
 * Set the captured image as profile image
 */
fun onImageCaptured(bitmap: Bitmap) {
    val newProfileImage = imageService.createImageModelByBitmap(bitmap)
    dummy.value?.setProfileImage(newProfileImage)
}
}

И в моем макете у меня есть следующее xml DataBinding:

<my.custom.widgets.ClickToSelectEditText
android:id="@+id/txtInputModel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
bind:dataSource="@{viewModel.models}"
bind:selectedItem="@={ModelToListableConverter.convertModelToListable(viewModel.dummy.model)}"/>

Все это прекрасно работает.У меня в виджете ClickToSelectEditText все модели на выбор, и с помощью функции loadModelsForManufacturer выбор можно изменить.

Но если я вызову функцию onImageCaptured и установлю свойство ProfilImage непосредственно вмой DummyClass, изменение выбора для моего источника данных больше не будет работать.До сих пор я узнал, что это должен быть звонок notifyPropertyChanged(BR.profileImage).Если я закомментирую это, другая привязка все еще работает.«notifyPropertyChanged», однако, необходимо, чтобы представление обновлялось правильно и отображалось новое изображение профиля.

У кого-нибудь была идея, почему notifyPropertyChanged может сломать другого наблюдателя?Или я что-то не так делаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...