#android #data-binding #android-databinding #android-livedata
#Android #привязка данных #android-привязка данных #android-livedata
Вопрос:
Я хочу передать a MutableLiveData<Integer>
в ClickListener, без того, чтобы привязка данных автоматически разворачивала его и просто передавала Integer
. Существует ли специальный синтаксис, позволяющий указать привязке данных оставить MutableLiveData<Integer>
в покое и просто передать его как есть? вот пример:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{v -> viewmodel.doSomething(viewmodel.myMutableLiveData1)}" />
Затем я бы пошел дальше и изменил значение myMutableLiveDataX
in doSomething()
Причина всего этого в том, что у меня несколько myMutableLiveDataX
s, и все они делают то же самое, но с разными данными, я не хочу создавать doSomething1()
doSomething2()
и т.д…
Одним из возможных, но неуклюжих обходных путей было бы, конечно, обернуть MutableLiveData
другой объект и передать его, когда MutableLiveData
требуется raw, а затем использовать getter для этого объекта всякий раз, когда используются развернутые данные.
Комментарии:
1. Если вы вызываете метод из viewmodel и передаете данные из viewmodel, то зачем вообще передавать данные? Просто используйте дату внутри метода, который вы вызываете?
2. @SamirSpahic причина в том, что я хочу использовать один и тот же метод для разных данных, например
doSomething(data1)
,doSomething(data2)
, и т.д.doSomething(data3)
Если я использую данные непосредственно в методе, мне нужно будет повторить один и тот же метод несколько раз.
Ответ №1:
Возможно, это то, что вам нужно
В Kotlin
fun doSomething(data: MutableLiveData<Any>){
val value=data.value
when(value){
is String->{}
is Int->{}
is YourCustomType->{}
}
}
В Java
void doSomething(MutableLiveData<Object> data){
Object value=data.getValue();
if(value instanceof Integer){}
else if(value instanceof String){}
else if(value instanceof YourCustomType){}
}
Комментарии:
1. Проблема не в
doSomething
методе, а в автоматически сгенерированном коде привязки данных из XML. Он автоматически развернетMutableLiveData<Object>
и передастObject
напрямую