Kotlin CustomView 2 路数据绑定



我有 1 个自定义视图,其中包含:文本视图 -> 标签;编辑文本 -> 输入 ;文本视图 ->

错误消息我使用自定义属性从自定义视图在 EditText 上设置所需的文本

我的绑定适配器如下所示:

@InverseBindingMethods(InverseBindingMethod(type = CustImp::class,attribute = "customtext"))
class BindingAdapters {
companion object {
@JvmStatic
@BindingAdapter("customtext")
fun settextulmeui(editText: CustImp, text: String?) {
text?.let {
if (it != editText.nInput.text.toString()) {
editText.nInput.setText(it)
}
}
}
@JvmStatic
@BindingAdapter(value = ["customtextAttrChanged"], requireAll = false)
fun setListener(editText: CustImp, listener: InverseBindingListener?) {
if (listener != null) {
editText.nInput.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {
}
override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {
}
override fun afterTextChanged(editable: Editable) {
listener.onChange()
}
})
}
}
@JvmStatic
@InverseBindingAdapter(attribute = "customtext")
fun gettextulmeui(nMe: CustImp): String {
return nMe.nInput.text.toString()
}
}
}

在我的布局中使用,例如:

<CustImp
android:id="@+id/mTest"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:customtext="@={login.mytext}"
/>

使用我的可观察字段"mytext",我可以从我的自定义视图中预填充我的编辑文本。如果我点击提交按钮,我可以获取键入的任何新值(使用我的视图模型中的可观察字段获取新值(

但是:如果我旋转屏幕,我会丢失所有数据;

任何帮助/线索? 谢谢

虽然您说旋转屏幕后一切都清除了,但似乎您只是在onCreate中创建模型对象。

model = ModelClass()

相反,您应该使用ViewModelProviders来获取可能存在的实例。

protected fun onCreate(savedInstanceState: Bundle) {
...
model = ViewModelProviders.of(this).get(ModelClass::class.java);
//"this" must be Activity reference
}

但为此,您的ModelClass必须扩展ViewModel类并具有空的构造函数。

当然,您可以使用onSaveInstanceState方法来保存模型状态,但对我来说ViewModel更好。

附言说"模型"我的意思是布局xml中名为login的对象,其中包含接口数据。

最新更新