Tengo un Int que contiene un número decimal en unidades de décimas, por ejemplo, mi int contiene 308 para representar el número decimal 30.8 . Quiero usar el enlace de datos para mostrar este número en un TextView junto con otro texto. Mi TextView tiene la siguiente entrada de texto:
android:text="@{String.format("my value: %.1f", @{viewModel.myValue}.toFloat()/10.0f)}"Esto no se puede compilar con el siguiente error:
[databinding] {"msg":"cannot find method toFloat() in class java.lang.Integer","file":"app/src/main/res/layout/fragment_you.xml","pos":[{"line0":163,"col0":54,"line1":163,"col1":84}]}El valor en cuestión se define así:
private val _myValue = MutableLiveData<Int>() val myValue: LiveData<Int> = _myValuePensé que esto significaba que era un entero de Kotlin y que podía llamar a las funciones de Kotlin, pero aparentemente es un entero de Java y no puedo.
¿Por qué no puedo llamar a toFloat() allí? ¿Cómo puedo mostrar este Int como un número decimal?
Esto podría ayudarte.
DataBindingConverter.kt
class DataBindingConverters { companion object { @JvmStatic fun convertIntegerToFloat(value: Int?): Float { return value/10.0f } } }importación XML
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <import type="com.package.DataBindingConverter" /> </data> .....Vincular a ver
<EditText ... android:text="@={DataBindingConverter.convertIntegerToFloat(viewModel.myValue)}" />En xml, si desea utilizar la conversión, deberá hacerlo de la forma en que lo hace en JAVA
Aquí, para convertirlo en flotante, intente usar ->
android:text="@{String.format("my value: %.1f", Float.valueOf(@{viewModel.myValue})/10.0f)}" .toFloat se debe hacer en las clases de kotlin. En xml todavía tienes que usar JAVA
Creo que funcionará.
android:text="@{String.format("my value: %.1f", @{(Float)(viewModel.myValue)}/10.0f)}"