我试图在数据绑定方法上处理可点击的TextView
,但是我收到了这个错误:
Cannot find the setter for attribute 'android:clickable' with parameter type lambda on android.widget.TextView
我的TextView
小部件必须是可点击的,并且我显示简单的Toast
,如何将文字设置为android:text="@string/my_text
,并且可以点击?
ActivityRegister:
public class ActivityRegister extends BaseActivities
implements ActivityRegisterContract.View{
private ActivityRegisterBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_register);
ActivityRegisterPresenter mainActivityPresenter = new ActivityRegisterPresenter(this);
ActivityRegisterData viewModel = new ActivityRegisterData();
viewModel.setReadContactPermission(Utils.getString(R.string.get_read_contact_permission, context));
binding.setPresenter(mainActivityPresenter);
}
@Override
public void getReadContactsPermission() {
Utils.toast("CLICKED", context);
}
}
主持人:
public class ActivityRegisterPresenter {
private ActivityRegisterContract.View view;
public ActivityRegisterPresenter(ActivityRegisterContract.View mView) {
view = mView;
}
public void getReadContactsPermission(){
view.getReadContactsPermission();
}
}
ActivityRegisterContract
public interface ActivityRegisterContract {
public interface View {
void getReadContactsPermission();
}
}
然后ActivityRegisterData
public class ActivityRegisterData extends BaseObservable {
private String readContactPermission;
public ActivityRegisterData() {
}
@Bindable
public String getReadContactPermission() {
return readContactPermission;
}
public void setReadContactPermission(String readContactPermission) {
this.readContactPermission = readContactPermission;
notifyPropertyChanged(BR.readContactPermission);
}
}
我的布局:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:slidingLayer="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="com.example.Ui.Register.Model.ActivityRegisterData"/>
<variable
name="presenter"
type="com.example.Ui.Register.Presenter.ActivityRegisterPresenter"/>
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#d1d1d1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/permission_for_read_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:text="@string/permission_for_read_contacts"
android:textColor="@color/white"/>
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/default_textview_height"
android:background="@drawable/selector_blue_buttons"
android:clickable="@{()->presenter.getReadContactsPermission()}"
android:text="@{viewModel.readContactPermission}"
android:textColor="@color/white"/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
</layout>
问题在于布局上的这一行:
<TextView
android:layout_width="match_parent"
android:layout_height="@dimen/default_textview_height"
android:background="@drawable/selector_blue_buttons"
android:clickable="@{()->presenter.getReadContactsPermission()}"
android:text="@{viewModel.readContactPermission}"
android:textColor="@color/white"/>
答案 0 :(得分:-1)
我不知道你的代码。但是要创建一个可点击的文本,你只需要添加一个监听器,或者你可以在Xml中定义onClick属性并在Activity中定义该方法来处理click事件。
使用此:
android:onclick="doSomething"
活动
public void doSomething(View v){
//Write your code here
}