Я реализую двухстороннее связывание данных с компонентами архитектуры Android, используя LiveData
и ViewModel
, но при сборке проекта он дает
error: cannot find symbol
import package.[layout_name]BindingImpl;
в DataBinderMapperImpl.java
Я следовал за официальной документацией и искал ответы на SO, но ни у одного из них не было работоспособных решений.
уже пробовал этот один и этот один
layout.xml
<data>
<import type="package.ViewModel" /> // this line was added from an answer but didn't work
<variable
name="model"
type="package.ViewModel"/>
</data>
// an input field I want to bind data with
<androidx.appcompat.widget.AppCompatAutoCompleteTextView
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={model.email}" // if I remove this line, builds fine
android:hint="@string/prompt_email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:singleLine="true" />
Расширение моего ViewModel
с AndroidViewModel
вместо BaseObservable
, как указано в документации
ViewModel.kt
private val email: MutableLiveData<String> by lazy { MutableLiveData<String>() }
@Bindable // tried to change the return type to String, still no luck
fun getEmail(): LiveData<String> {
return email
}
fun setEmail(email: String) {
this.email.value = email
}
Вот как я связываю ViewModel
с View
Activity.kt
binding.model = ViewModelProviders.of(this, ViewModelProvider.AndroidViewModelFactory
.getInstance(application))
.get(LoginViewModel::class.java)
Чего мне не хватает?Уже включены все предварительные привязки данных, и если я заменил ViewModel
в layout
на data class
и попытался получить от него данные, это прекрасно работает, но с @{}
в layout
EDIT
Хорошо, поэтому, когда я выставляю email
как public
, он компилируется и работает привязка, но я не могу сделать его установщик и получатель public
, я имею в виду, когдаЯ пытаюсь выставить его из метода получения и установки, IDE говорит, что это уже private
fun
ctions и не может быть override
n?
Как я могу сделать это свойство доступным через fun
ctions