【问题标题】:EditText imeOptions and databinding not workingEditText imeOptions 和数据绑定不起作用
【发布时间】:2020-01-24 05:07:08
【问题描述】:

我正在尝试使用数据绑定在我的视图模型中处理 imeOption actionDone。

还有一些其他帖子没有给出我正在寻找的解决方案。我想用 BindingAdapter 在 XML 中设置它来处理 actionDone 事件。在其他帖子的解决方案之后,我不断收到不同的数据绑定错误。

我真的希望我能找到一个文档,其中概述了所有数据绑定 XML 语法以及为什么工作会导致很多文档(包括官方 Android 文档)混合使用 lambdas 不/传递参数而没有解释。在 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) -&gt; mainViewModel.onEditorActionDone()}" app:onEditorActionDone="@{mainViewModel.onEditorActionDone}"

【问题讨论】:

  • 其实你想做什么?
  • 我更新了帖子,很抱歉造成混乱。我想在我的 ViewModel 中处理 imeOptions actionDone。

标签: android android-databinding


【解决方案1】:

您不需要自定义@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" />

你的视图模型类应该实现TextView.OnEditorActionListener接口:

public class ViewModel implements TextView.OnEditorActionListener {       
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        Log.d("ViewModel", "onEditorAction");
        return false;
    }
}

【讨论】:

  • 我曾根据其他地方的另一篇文章尝试过。我缺少实现 TextView.OnEditorActionListener ,这会在构建期间导致其他数据绑定错误。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-01-16
  • 2011-07-04
  • 2023-04-07
  • 2017-07-17
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多