android - 如何在 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.String
in xml。
有什么解决方案可以解决这个问题吗?或者在项目中有没有合适的双向绑定方式Kotlin-Multiplatform
?
解决方案
看起来您在 xml 文件中添加了错误的变量。在您的视图模型中,您创建了一个名为myVariable
type的变量,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
。您可以简单地使用在viewModel
For 例如中创建的变量:-android:text="@={viewModel.yourVariable}"
推荐阅读
- spark-java - Spark.unmap() 在取消映射 API 时创建 CORS 问题
- android - 类型不匹配:推断类型为 AutoMigration 但应为 KClass<*>
- html - 如何将图像绑定到作为 vue.js 中后端响应的图像部分?
- java - 将列表分解为单个列表 java
- html - 大文件上传问题(在本地工作但不在服务器上工作)
- java - 监听器内部的变量不会改变
- airflow - 气流 log_format 使用 logging_mixin.py 作为源文件而不是真正的源文件
- c++ - 如果我向这样的向量提供输入,这有什么问题?
- python - leetcode 中的斐波那契
- python - 如何计算熊猫列表中每个字符串的唯一计数?