首页 > 解决方案 > 如何在 Kotlin-Multiplatform 中正确使用两种方式绑定?

问题描述

我正在尝试使用String变量将其绑定到我的视图中。当我使用带有String属性的模型对象时,它运行良好。但如果我String单独使用该变量,它只适用于一种方式绑定。

视图模型:

class SampleModel(var data : String = "")

var myModel : SampleModel = SampleModel()
var myVariable : String = ""

XML:

<data>
   <variable
        name="model"
        type="MyViewModel.SampleModel" />

   <variable
        name="variable"
        type="String" />
</data>

<!-- Two way works fine -->
<EditText
    android:text="@={model.data}"/>


<!-- Only one way works -->
<EditText
    android:text="@={variable}"/>

字符串中的字符串SampleModel可以很好地使用两种方式绑定,但String变量不能。

我认为这是因为String在 xml 中导入的是java.lang.String,但String在模型中是kotlin.String. 而且我无法使用kotlin.Stringin xml。

有什么解决方案可以解决这个问题吗?或者在项目中有没有合适的双向绑定方式Kotlin-Multiplatform

标签: androidkotlindata-bindingkotlin-multiplatform2-way-object-databinding

解决方案


看起来您在 xml 文件中添加了错误的变量。在您的视图模型中,您创建了一个名为myVariabletype的变量,String但在您的xml文件中,您在这里又创建了一个变量:-

 <variable
    name="variable"
    type="String" />

所以这两个变量是不同的。您不需要在xml文件中导入任何内容,只需创建一个viewModel您已经在此处完成的变量:-

<variable
    name="model"
    type="MyViewModel.SampleModel" />

现在只需像这样使用它:- android:text="@={model. myVariable}"

更新 :-在这里,您需要使用String我在您的变量中创建的变量,viewModel因为它使用kotlin.String并且xml您拥有java.lang.String。您可以简单地使用在viewModelFor 例如中创建的变量:-android:text="@={viewModel.yourVariable}"


推荐阅读