android - studio - data binding español
Error en el enlace de datos de Android @BindingConversion para int a string (3)
Se encontró con un problema misterioso al tratar de hacer una @BindingConversion para int a string.
El siguiente código funciona para flotadores a cadenas :
xml:
...
<variable
name="myViewModel"
type="... .SomeModel" />
...
<TextView
style="@style/StyleStuff"
android:text="@{myViewModel.number}" />
código:
public class SomeModel {
public ObservableFloat number = new ObservableFloat();
}
y configuración:
viewModel.number.set(3.14f);
Pero si trato de hacer lo mismo con las cadenas y las cuerdas, me choco.
public ObservableInt number = new ObservableInt();
con
viewModel.number.set(42);
Me sale lo siguiente:
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)
¿Algunas ideas? ¡Gracias!
La solución más simple, puede ser que ayude a alguien.
android:text="@{`` + model.intValue}"
Esto también se puede utilizar en el enlace de dos vías para EditText
. Donde la entrada de los usuarios se establece como valor Integer en el modelo y se muestra como String
.
android:text="@={`` + model.intValue}"
Ver esta respuesta también.
Convierte int en una cadena para establecer en TextView como a continuación:
android:text="@{String.valueOf(myViewModel.number)}"
Además, String
clase String
debe ser importada por el diseño:
<layout>
<data>
<import type="java.lang.String" />
</data>
…
</layout>
android:text
con un int
supone que el int
es un ID de recurso de cadena. Use android:text="@{Integer.toString(myViewModel.number)}"
.
También necesitarás importar la clase Integer
:
<layout>
<data>
<import type="java.lang.Integer" />
</data>
<!-- rest of layout goes here -->
</layout>