EditText TextWatcher 替换为 LiveData
EditText TextWatcher replace with LiveData
有没有办法用双向数据绑定模式替换 EditText
TextWatcher
?
我试过了:
class AddViewModel @Inject constructor() : ViewModel() {
val description = MutableLiveData<String>()
}
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/descriptionEditText"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="@dimen/default_spacing"
android:background="@drawable/ic_input_background"
android:gravity="top"
android:minHeight="200dp"
android:padding="4dp"
android:text="@{viewModel.description}"
app:layout_constraintBottom_toTopOf="@+id/postButton"
app:layout_constraintEnd_toEndOf="parent"/>
我找到了类似的东西 here,但不知何故我无法让它工作。
更新:
我只是在 @
之后缺少 =
签名
android:text="@{viewModel.description}"
-> android:text="@={viewModel.description}"
您应该在 XML
中使用 OnTextChanged 属性
<data>
<variable
name="onTextChanged"
type="androidx.databinding.adapters.TextViewBindingAdapter.OnTextChanged" />
</data>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/descriptionEditText"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="@dimen/default_spacing"
android:background="@drawable/ic_input_background"
android:gravity="top"
android:minHeight="200dp"
android:padding="4dp"
android:onTextChanged="@{viewModel.description}"
app:layout_constraintBottom_toTopOf="@+id/postButton"
app:layout_constraintEnd_toEndOf="parent"/>
现在您可以将 onTextChanged 传递给包含的布局,如下所示。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
layout="@layout/base_edittext_view"
app:onTextChanged="@{(text, start, before, count) -> viewModel.onTextChanged(text)}"/>
</LinearLayout>
然后你需要在你的ViewModel中添加这个方法
fun description(s: CharSequence,start: Int,before : Int,count :Int){
//TODO write your implementation here ...
}
有没有办法用双向数据绑定模式替换 EditText
TextWatcher
?
我试过了:
class AddViewModel @Inject constructor() : ViewModel() {
val description = MutableLiveData<String>()
}
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/descriptionEditText"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="@dimen/default_spacing"
android:background="@drawable/ic_input_background"
android:gravity="top"
android:minHeight="200dp"
android:padding="4dp"
android:text="@{viewModel.description}"
app:layout_constraintBottom_toTopOf="@+id/postButton"
app:layout_constraintEnd_toEndOf="parent"/>
我找到了类似的东西 here,但不知何故我无法让它工作。
更新:
我只是在 @
=
签名
android:text="@{viewModel.description}"
-> android:text="@={viewModel.description}"
您应该在 XML
中使用 OnTextChanged 属性 <data>
<variable
name="onTextChanged"
type="androidx.databinding.adapters.TextViewBindingAdapter.OnTextChanged" />
</data>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/descriptionEditText"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="@dimen/default_spacing"
android:background="@drawable/ic_input_background"
android:gravity="top"
android:minHeight="200dp"
android:padding="4dp"
android:onTextChanged="@{viewModel.description}"
app:layout_constraintBottom_toTopOf="@+id/postButton"
app:layout_constraintEnd_toEndOf="parent"/>
现在您可以将 onTextChanged 传递给包含的布局,如下所示。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
layout="@layout/base_edittext_view"
app:onTextChanged="@{(text, start, before, count) -> viewModel.onTextChanged(text)}"/>
</LinearLayout>
然后你需要在你的ViewModel中添加这个方法
fun description(s: CharSequence,start: Int,before : Int,count :Int){
//TODO write your implementation here ...
}