首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RadioButton onCheckedChanged与DataBinding和lambdas

RadioButton onCheckedChanged与DataBinding和lambdas
EN

Stack Overflow用户
提问于 2016-12-06 01:43:02
回答 1查看 4.4K关注 0票数 5

我有一个RadioButton:

代码语言:javascript
复制
<RadioButton
    android:id="@+id/rdioA"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:checked="@{!q.b}"
    android:onCheckedChanged="@{(cb, isChecked) -> {if (isChecked) q.setB(false)}}"
    android:text="AAA"/>

变量'q‘的定义为:

代码语言:javascript
复制
<data>
    <import type="android.view.View"/>
    <variable name="q" type="com.example.Q"/>
</data>

Q.java中的功能是:

代码语言:javascript
复制
public void setB(boolean b) {
    this.b = b;
}

我得到的编译错误是:

代码语言:javascript
复制
/Users/../view_d.xml
Error:(60, 53) Syntax error: extraneous input '=' expecting {<EOF>, '.', '::', '[', '+', '-', '*', '/', '%', '<<', '>>>', '>>', '<=', '>=', '>', '<', 'instanceof', '==', '!=', '&', '^', '|', '&&', '||', '?', '??'} 
Error:Execution failed for task ':app:compileDevDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.

如果我用

代码语言:javascript
复制
android:onCheckedChanged="@{q::onCheckedChanged}"

没有问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-06 18:58:01

不能在数据绑定表达式中使用语句。这包括大括号或if语句。用这个代替:

代码语言:javascript
复制
<RadioButton
    android:id="@+id/rdioA"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:checked="@{!q.b}"
    android:onCheckedChanged="@{(cb, isChecked) -> (isChecked) ? q.setB(false) : void}"
    android:text="AAA"/>

可以使用三元表达式替换if语句。如果您不想做任何事情,可以使用void关键字来表示没有返回值。这是因为onCheckedChanged()有一个void返回值。如果您是绑定到期望返回值(如onLongClick() )的侦听器,则应使用该侦听器的返回类型-- truefalse表示onLongClick()

您应该尽量避免在数据绑定表达式中使用复杂的逻辑。不支持语句的选择是试图限制绑定表达式的复杂性。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40986456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档