如何通过数据绑定将其他布局视图的内容传递给 onclick 中的演示者?
How to pass contents of other layout Views into presenter in onclick with data binding?
基本上,我该怎么做:
android:onClick="@{()->presenter.login(username.getText(), password.getText())}"
其中用户名和密码是布局中的 EditText 视图,我想将其内容传递给演示者。是否需要设置双向数据绑定来执行此操作,或者有没有办法在布局中引用其他视图的内容?
我想知道是否有一种方法是启用双向数据绑定并使用视图模型,例如带有用户名和密码字段的 LoginViewModel,将其设置为 上的变量,在提交表单时将整个内容传递给登录演示者,然后从那里读取它。
不幸的是,无法使用 Databinding
访问布局本身内视图的值。唯一的方法是在布局文件中的变量中设置这些值,并使用演示者访问它们。例如:
Activity:
@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)}"/>
不完全是您正在寻找但是是的,有一种类似的方式。
您可以在演示者中传递整个 EditText
并从中获取文本。
android:onClick="@{()->presenter.login(edtUsername, edtPassword)}"
在你的演讲者里面
public void login(EditText edtUsername, EditText edtPassword)
{
}
您可以通过 ID 访问相同布局中的视图:
<EditText android:id="@+id/username"
... />
<EditText android:id="@+id/password"
... />
<Button android:onClick="@{v->presenter.login(username.getText(), password.getText())}"
... />
幸运的是,您可以从 EditText 访问文本值,因为它支持双向。你可以这样做:
android:onClick="@{()->presenter.login(username.text, password.text)}"
基本上,我该怎么做:
android:onClick="@{()->presenter.login(username.getText(), password.getText())}"
其中用户名和密码是布局中的 EditText 视图,我想将其内容传递给演示者。是否需要设置双向数据绑定来执行此操作,或者有没有办法在布局中引用其他视图的内容?
我想知道是否有一种方法是启用双向数据绑定并使用视图模型,例如带有用户名和密码字段的 LoginViewModel,将其设置为 上的变量,在提交表单时将整个内容传递给登录演示者,然后从那里读取它。
不幸的是,无法使用 Databinding
访问布局本身内视图的值。唯一的方法是在布局文件中的变量中设置这些值,并使用演示者访问它们。例如:
Activity:
@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)}"/>
不完全是您正在寻找但是是的,有一种类似的方式。
您可以在演示者中传递整个 EditText
并从中获取文本。
android:onClick="@{()->presenter.login(edtUsername, edtPassword)}"
在你的演讲者里面
public void login(EditText edtUsername, EditText edtPassword)
{
}
您可以通过 ID 访问相同布局中的视图:
<EditText android:id="@+id/username"
... />
<EditText android:id="@+id/password"
... />
<Button android:onClick="@{v->presenter.login(username.getText(), password.getText())}"
... />
幸运的是,您可以从 EditText 访问文本值,因为它支持双向。你可以这样做:
android:onClick="@{()->presenter.login(username.text, password.text)}"