如何通过数据绑定将其他布局视图的内容传递给onclick中的演示者?

时间:2017-05-17 10:53:41

标签: android android-databinding

基本上,我该怎么做:

android:onClick="@{()->presenter.login(username.getText(), password.getText())}"

其中用户名和密码是布局中的EditText视图,其内容我想传递给演示者。是否有必要设置双向数据绑定来执行此操作,还是有办法在布局中引用其他视图的内容?

我想知道一种方法是启用双向数据绑定并使用视图模型,例如LoginViewModel包含用户名和密码的字段,将其设置为变量,在提交表单时将整个内容传递给登录展示器,并将其读出。

4 个答案:

答案 0 :(得分:1)

幸运的是,您可以从EditText访问文本值,因为它支持双向。你可以这样做:

android:onClick="@{()->presenter.login(username.text, password.text)}"

答案 1 :(得分:0)

不幸的是,无法使用Databinding访问布局本身中的视图值。执行此操作的唯一方法是在布局文件中的变量内设置这些值,并使用演示者访问它们。例如:

<强>活动:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = DataBindingUtil.setContentView(this, R.layout.your_layout);

    String username = mBinding.editText.getText().toString();
    String password = mBinding.editText.getText().toString();
    mBinding.setUserName(username);
    mBinding.setpassword(password);
  }

<强>布局:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <variable
            name="name"
            type="java.lang.String" />

        <variable
            name="password"
            type="java.lang.String" />

       <Button
       android:onClick="@{()->presenter.login(username, password)}"/>

答案 2 :(得分:0)

不完全您正在寻找但是有类似的方式

您可以在演示者中传递整个EditText并从中获取文字。

android:onClick="@{()->presenter.login(edtUsername, edtPassword)}"

并在您的演示者内部

public void login(EditText edtUsername, EditText edtPassword)
{

}

答案 3 :(得分:0)

您可以按ID:

访问相同布局的视图
<EditText android:id="@+id/username"
    ... />
<EditText android:id="@+id/password"
    ... />
<Button android:onClick="@{v->presenter.login(username.getText(), password.getText())}"
    ... />