tutorial studio español ejemplo databinding data android data-binding android-databinding

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>