Android 数据绑定和三元运算符 (?:) 获取可绘制对象
Android databinding and ternary operator (?:) to get drawables
我正在尝试根据函数是假还是真来获取可绘制对象。但我做错了什么。所以感谢任何帮助
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:onClick="@{() -> handler.onVoteClicked(gameFeed.uid)}"
android:src="@{() -> handler.existInList(feed.ratings,feed.uid) ? @drawable/ic_star_border : @drawable/ic_star}"
android:layout_gravity="center_vertical"/>
这是我试图从我的处理程序中调用的函数。
public boolean existInList(Map<String,Boolean> ratings, String userId) {
for (Map.Entry<String, Boolean> entry : ratings.entrySet()) {
if(entry.getValue().equals(userId)) {
return true;
}
}
return false;
}
添加了我遇到的错误
Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Cannot find the proper callback class
for android:src. Tried android.graphics.drawable.Drawable but it has 4 abstract methods, should have 1 abstract methods. file:/Users/brahim/ProjectNinjo/app/src/main/res/layout/adapter_feed_row.xml loc:108:33 - 108:135 ****\ data binding error ****
更新
我注意到它可以抓取可绘制对象。但是它在调用该函数时遇到问题。我猜我不能从三元运算符调用函数,或者我以错误的方式调用函数
这解决了。而不是在处理程序 class 上调用函数。我发现哈希图包含函数。这样就解决了
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:onClick="@{() -> handler.onVoteClicked(feed.uid)}"
android:src="@{feed.ratings.containsKey(feed.uid) ? @drawable/ic_star : @drawable/ic_star_border}"
android:layout_gravity="center_vertical"/>
您使用了错误的语法。
() -> ...
是回调语法,当事件发生时执行。
示例:android:onClick="@() -> callback.onClick()"
.
相反,您只需要一个像这样的简单绑定表达式:
android:src="@{handler.existInList(feed.ratings,feed.uid) ? @drawable/ic_star_border : @drawable/ic_star}"
我正在尝试根据函数是假还是真来获取可绘制对象。但我做错了什么。所以感谢任何帮助
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:onClick="@{() -> handler.onVoteClicked(gameFeed.uid)}"
android:src="@{() -> handler.existInList(feed.ratings,feed.uid) ? @drawable/ic_star_border : @drawable/ic_star}"
android:layout_gravity="center_vertical"/>
这是我试图从我的处理程序中调用的函数。
public boolean existInList(Map<String,Boolean> ratings, String userId) {
for (Map.Entry<String, Boolean> entry : ratings.entrySet()) {
if(entry.getValue().equals(userId)) {
return true;
}
}
return false;
}
添加了我遇到的错误
Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Cannot find the proper callback class
for android:src. Tried android.graphics.drawable.Drawable but it has 4 abstract methods, should have 1 abstract methods. file:/Users/brahim/ProjectNinjo/app/src/main/res/layout/adapter_feed_row.xml loc:108:33 - 108:135 ****\ data binding error ****
更新
我注意到它可以抓取可绘制对象。但是它在调用该函数时遇到问题。我猜我不能从三元运算符调用函数,或者我以错误的方式调用函数
这解决了。而不是在处理程序 class 上调用函数。我发现哈希图包含函数。这样就解决了
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:onClick="@{() -> handler.onVoteClicked(feed.uid)}"
android:src="@{feed.ratings.containsKey(feed.uid) ? @drawable/ic_star : @drawable/ic_star_border}"
android:layout_gravity="center_vertical"/>
您使用了错误的语法。
() -> ...
是回调语法,当事件发生时执行。
示例:android:onClick="@() -> callback.onClick()"
.
相反,您只需要一个像这样的简单绑定表达式:
android:src="@{handler.existInList(feed.ratings,feed.uid) ? @drawable/ic_star_border : @drawable/ic_star}"