加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 无法在android数据绑定中生成click事件

发布时间:2020-12-15 04:48:23 所属栏目:Java 来源:网络整理
导读:View. Java package com.espresso.mvvmtestproject;import android.content.Context;import android.databinding.DataBindingUtil;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import com.espresso.mvvmtestproject.databind
View. Java

package com.espresso.mvvmtestproject;

import android.content.Context;
import android.databinding.DataBindingUtil;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.espresso.mvvmtestproject.databinding.ActivityMainBinding;


public class View extends AppCompatActivity implements ViewContract.requiredMethods{


    ViewModel mModel;
    ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Setting the layout
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        mModel=new ViewModel(getContext());
        binding.setUser(mModel);
        binding.setHandlers(new MyHandlers());

    }

    @Override
    public void onDestroy() {
        super.onDestroy();

    }

    @Override
    public Context getContext() {
        return View.this;
    }


}

ViewContract.java

public interface ViewContract {
    interface requiredMethods{
        Context getContext();
    }
}

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="user"
            type="com.espresso.mvvmtestproject.ViewModel"/>
        <variable
            name="handlers"
            type="com.espresso.mvvmtestproject.MyHandlers"/>
    </data>




    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center">
        <TextView android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:layout_gravity="center"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:text="First Text"/>
        <TextView android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:layout_gravity="center"
            android:gravity="center"
            android:textColor="@android:color/black"
            android:text="Second Text"/>

        <Button
            android:text="Show Toast"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="@{handlers::onShowToast}"/>
    </LinearLayout>

</layout>

MyHandlers.java

public class MyHandlers {

    public void onShowToast(View view) {
        Toast.makeText(view,"Clicked",Toast.LENGTH_SHORT).show();
    }

}

ViewModel.java

public class ViewModel {


    private Context mActivity;

    public ViewModel(Context context) {
        this.mActivity=context;
    }

    public void onShowToast(View view) {
        Toast.makeText(mActivity,Toast.LENGTH_SHORT).show();
    }

}

错误日志

Information:Gradle tasks [:app:clean,:app:generateDebugSources,:app:mockableAndroidJar,:app:prepareDebugUnitTestDependencies,:app:generateDebugAndroidTestSources,:app:assembleDebug]
D:ProjectsTrpMvvmTestProjectappsrcmainjavacomespressomvvmtestprojectView.java
Error:(8,48) error: package com.espresso.mvvmtestproject.databinding does not exist
Error:(15,5) error: cannot find symbol class ActivityMainBinding
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.RuntimeException: Found data binding errors.
****/ data binding error ****msg:Listener class android.view.View.OnClickListener with method onClick did not match signature of any method handlers::onShowToast
file:D:ProjectsTrpMvvmTestProjectappsrcmainreslayoutactivity_main.xml
loc:40:31 - 40:51
**** data binding error ****
Information:BUILD FAILED
Information:Total time: 4.396 secs
Information:3 errors
Information:0 warnings
Information:See complete output in console

解决方法

从类中创建MyHandlers接口.

public class MyHandlers {
    public void onShowToast(View view);
}

在您的Activity或Fragment中实现它,在您的情况下它将如下所示

public class View extends AppCompatActivity implements ViewContract.requiredMethods,MyHandlers{

    ViewModel mModel;
    ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Setting the layout
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        mModel=new ViewModel(getContext());
        binding.setUser(mModel);
        binding.setHandlers(this);

    }        

    @Override
    public void onShowToast(View view) {
        Toast.makeText(view,Toast.LENGTH_SHORT).show();
    }
}

覆盖你的接口方法onShowToast并设置绑定的处理程序,就是这样,你完成了点击事件

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读