EditText imeOptions 和数据绑定不起作用
EditText imeOptions and databinding not working
我正在尝试使用数据绑定在我的视图模型中处理 imeOption actionDone。
还有一些其他帖子没有提供我正在寻找的解决方案。我想在 XML 中使用 BindingAdapter 来设置它来处理 actionDone 事件。在其他帖子的解决方案之后,我不断收到不同的数据绑定错误。
我真的希望我能找到一个文档,其中概述了所有数据绑定 XML 语法以及为什么事情会起作用导致很多文档(包括官方 Android 文档)混合使用 lambda not/passing 没有解释的参数。稍微改变一下 gradle build.
中的绑定错误
xml
<EditText
android:id="@+id/passwordEdit"
android:layout_width="0dp"
android:layout_height="42dp"
android:ems="10"
android:text="@={mainViewModel.password}"
android:inputType="textPassword"
android:imeOptions="actionDone"
app:onEditorActionDone="@{(view) -> mainViewModel.onEditorActionDone(view)}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/passwordTitle" />
视图模型
@BindingAdapter({"onEditorActionDone"})
public void onEditorActionDone(EditText view) {
AppLog.d(TAG, "-> onEditorActionDone()");
view.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//do login
}
//do nothing
});
}
我试过了
app:onEditorActionDone="@{mainViewModel::onEditorActionDone}"
app:onEditorActionDone="@{(view) -> mainViewModel.onEditorActionDone()}"
app:onEditorActionDone="@{mainViewModel.onEditorActionDone}"
您不需要自定义 @BindingAdapter
。试试这个:
<EditText
android:id="@+id/passwordEdit"
android:layout_width="0dp"
android:layout_height="42dp"
android:ems="10"
android:text="@={mainViewModel.password}"
android:inputType="textPassword"
android:imeOptions="actionDone"
android:onEditorAction="@{(view,actionId,event) -> viewModel.onEditorAction(view,actionId,event)}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/passwordTitle" />
并且您的视图模型 class 应该实现 TextView.OnEditorActionListener
接口:
public class ViewModel implements TextView.OnEditorActionListener {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.d("ViewModel", "onEditorAction");
return false;
}
}
我正在尝试使用数据绑定在我的视图模型中处理 imeOption actionDone。
还有一些其他帖子没有提供我正在寻找的解决方案。我想在 XML 中使用 BindingAdapter 来设置它来处理 actionDone 事件。在其他帖子的解决方案之后,我不断收到不同的数据绑定错误。
我真的希望我能找到一个文档,其中概述了所有数据绑定 XML 语法以及为什么事情会起作用导致很多文档(包括官方 Android 文档)混合使用 lambda not/passing 没有解释的参数。稍微改变一下 gradle build.
中的绑定错误xml
<EditText
android:id="@+id/passwordEdit"
android:layout_width="0dp"
android:layout_height="42dp"
android:ems="10"
android:text="@={mainViewModel.password}"
android:inputType="textPassword"
android:imeOptions="actionDone"
app:onEditorActionDone="@{(view) -> mainViewModel.onEditorActionDone(view)}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/passwordTitle" />
视图模型
@BindingAdapter({"onEditorActionDone"})
public void onEditorActionDone(EditText view) {
AppLog.d(TAG, "-> onEditorActionDone()");
view.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//do login
}
//do nothing
});
}
我试过了
app:onEditorActionDone="@{mainViewModel::onEditorActionDone}"
app:onEditorActionDone="@{(view) -> mainViewModel.onEditorActionDone()}"
app:onEditorActionDone="@{mainViewModel.onEditorActionDone}"
您不需要自定义 @BindingAdapter
。试试这个:
<EditText
android:id="@+id/passwordEdit"
android:layout_width="0dp"
android:layout_height="42dp"
android:ems="10"
android:text="@={mainViewModel.password}"
android:inputType="textPassword"
android:imeOptions="actionDone"
android:onEditorAction="@{(view,actionId,event) -> viewModel.onEditorAction(view,actionId,event)}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/passwordTitle" />
并且您的视图模型 class 应该实现 TextView.OnEditorActionListener
接口:
public class ViewModel implements TextView.OnEditorActionListener {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.d("ViewModel", "onEditorAction");
return false;
}
}