我需要在isFavorite
为true时单击,然后单击onClickSubscribe()
,否则调用onClickUnsubscribe()
。
在我的片段中:
@Override
public void onClickSubscribe() {
}
在我的xml中:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="handler"
type="SubscribeBrandDialogFragment" />
</data>
<TextView
android:id="@+id/subscribeTextView"
android:layout_width="185dp"
android:layout_height="40dp"
android:onClick="@{handler.isFavorite ? handler.onClickSubscribe() : handler.onClickUnsubscribe()}"
android:text="@{handler.isFavorite ? @string/unsubscribe : @string/subscribe}"/>
</layout>
但是我得到了错误:
e: [kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:onClick' with parameter type void on android.widget.TextView.
file:res\layout\subscribe_brand_dialog.xml
loc:100:31 - 100:108
****\ data binding error ****
at android.databinding.tool.processing.Scope.assertNoError(Scope.java:112)
答案 0 :(得分:1)
找不到带有参数的属性“ android:onClick”的设置器 在android.widget.TextView上输入void
如果您未在onClick中编写 ()->
,则必须将View类型作为方法中的第一个参数。
将onClick行更改为下方。
android:onClick="@{handler.isFavorite ? handler::onClickSubscribe : handler::onClickUnsubscribe}"
然后将TextView
设置为onClickSubscribe
和onClickUnsubscribe
的第一个参数。
void onClickSubscribe (TextView tv) {
...
}
&与onClickUnsubscribe
相同
全部完成!
使用Boolean
设置通用方法。
void onSubscribe(boolean isSubscribe){
if(isSubscribe){}
else {}
}
并称呼它
android:onClick="@{() -> handler.onSubscribe(handler.isFavorite)}"
因此,您的两种方法都简化为1。
如果您需要传递任何其他值,只需更改onSubscribe
的参数即可。并从xml传递。
答案 1 :(得分:0)
您可以使用此:
android:onClick="@{()->handler.isFavorite ? handler.onClickSubscribe() : handler.onClickUnsubscribe()}"
一开始不要忘记()->