data-binding - Kotlin CustomView 2 路数据绑定
问题描述
我有 1 个自定义视图,其中包含:TextView -> 标签;编辑文本->输入;TextView -> 错误信息
我使用自定义属性从自定义视图中在我的 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”,我可以从我的自定义视图中预先填充我的编辑文本。如果我点击提交按钮,我可以获得输入的任何新值(使用我的视图模型中的 observablefield 获取新值)
但是:如果我旋转屏幕,我会丢失所有数据;
任何帮助/线索?谢谢
解决方案
虽然您说旋转屏幕后一切都清除了,但您似乎只是在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
来说更好。
PS 说“模型”是指login
在您的布局 xml 中调用的对象,其中包含接口数据。
推荐阅读
- sapui5 - sap.ui.table.Table - 按内容以编程方式选择行
- assembly - 具有两个递归函数的二元炸弹阶段 4
- java - 缺少退货声明,我缺少什么
- nexus3 - 如何为 Gauge 插件配置 Nexus3 存储库?
- powerapps - 如何将 google sheet excel 列值添加到电源应用程序的下拉列表中
- javascript - Javascript on Press Keydown“Q”按下键“1”和“2”
- ruby - 从 CSV 解析唯一值
- django - 获取 django 下拉菜单项查询集
- dart - Flutter 组合框和数字输入
- zsh - zsh:运行 zle 小部件后的刷新提示