Gre*_*246 22 data-binding android togglebutton android-databinding
我的ObservableBoolean活动类中有一个字段,它绑定到我ToggleButton喜欢的"checked"属性:
android:checked="@{activity.editing}"
Run Code Online (Sandbox Code Playgroud)
我希望这会在按钮和布尔值之间创建双向关系,但它只会从字段到按钮进行更改,而不是相反.我做错了什么,或者这不在Android的范围内DataBinding?
yen*_*rah 42
您需要另一个'='来告诉Android您要使用双向数据绑定:
android:checked="@={activity.editing}"
Run Code Online (Sandbox Code Playgroud)
您可以在George Mount的wordpress文章中找到更多相关信息:
双向数据绑定
Android不会受到典型数据输入的影响,将用户输入的变化反映回模型通常很重要.例如,如果上述数据是以联系形式出现的,那么将编辑后的文本推回到模型中而不必从EditText中提取数据会很不错.这是你如何做到的:
<layout ...>
<data>
<variable type="com.example.myapp.User" name="user"/>
</data>
<RelativeLayout ...>
<EditText android:text="@={user.firstName}" .../>
</RelativeLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
很漂亮,嗯?这里唯一的区别是表达式用
@={}而不是标记@{}.预计大多数数据绑定将继续是单向的,我们不希望创建所有这些监听器并观察永远不会发生的变化.
无需采取ObservableBoolean,您可以通过布尔变量的常规getter-setter方法执行此操作。在您的模型课中是这样的
public class User{
private boolean checked;
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
}
Run Code Online (Sandbox Code Playgroud)
在上执行双向绑定ToggleButton。
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="@={user.checked}"/>
Run Code Online (Sandbox Code Playgroud)
并使用绑定变量获取此值。
binding.getUser().isChecked()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13868 次 |
| 最近记录: |