Wystąpił tajemniczy problem podczas próby utworzenia @BindingConversion dla int do napisu.
następujący kod prace dla pływaków do strun:Wiązanie danych Androida @BindingConversion nie powiodło się dla int string
xml:
...
<variable
name="myViewModel"
type="... .SomeModel" />
...
<TextView
style="@style/StyleStuff"
android:text="@{myViewModel.number}" />
Kod:
public class SomeModel {
public ObservableFloat number = new ObservableFloat();
}
i ustawienie:
viewModel.number.set(3.14f);
Ale jeśli spróbuję tego samego dla ints do ciągów znaków Mam awarię.
public ObservableInt number = new ObservableInt();
z
viewModel.number.set(42);
otrzymuję następujący:
FATAL EXCEPTION: main
Process: ...myapplication, PID: 14311
android.content.res.Resources$NotFoundException: String resource ID #0xfa0
at android.content.res.Resources.getText(Resources.java:1123)
at android.support.v7.widget.ResourcesWrapper.getText(ResourcesWrapper.java:52)
at android.widget.TextView.setText(TextView.java:4816)
at ...executeBindings(ActivityAdaptersBinding.java:336)
at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:355)
Jakieś pomysły? Dzięki!
Aha! Dziękuję Ci! bym dane myślowe wiązania byłoby sprawdzić i przekształcić int zanim uderzył w widoku tekstu, ale najwyraźniej nie ~ Oznacza to, że powinniśmy być ostrożni, gdy za pomocą BindingConversion jeśli oryginalny typ może być błędnie interpretowane i stosowane bez uderzenia przetwornik. – Dave
@Dave: "Wydaje mi się, że powiązanie danych sprawdzi i przekonwertuje int przed trafieniem w widok tekstowy" - nie, ponieważ ponieważ wszystkie powiązania danych wiedzą, to * dajesz * identyfikator ID łańcucha. "Oznacza to, że powinniśmy być ostrożni" - tak. :-) – CommonsWare
Jak byś to zrobił, gdybyś chciał stworzyć 2-stronne wiązanie? – InfernalRapture