Android数据绑定:对两个数据绑定使用@={}语法会导致Binding文件不生成



我正在尝试使用android 2路数据绑定库的2路数据绑定功能。

我的gradle版本是
dependencies {
    classpath 'com.android.tools.build:gradle:2.2.1'
} 

当我使用库进行简单绑定时,它可以工作

 <EditText
            android:id="@+id/text_view_username"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="20dp"
            android:gravity="center"
            android:hint="Enter Username"
            android:inputType="text"
            android:text="@{model.username}"
        />

当我使用@={}格式进行2路数据绑定时,它不起作用

 <EditText
            android:id="@+id/text_view_username"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="20dp"
            android:gravity="center"
            android:hint="Enter Username"
            android:inputType="text"
            android:text="@={model.username}"
        />

行不通。我得到以下错误

Error:(9, 31) error: package databinding does not exist

基本上没有生成数据绑定类。如果需要其他信息,请告诉我。

public class Login implements IBaseModel {
    public String username, password;
    public Login(String username, String password) {
        this.username = username;
        this.password = password;
    }
    public String getUsername() {
        return this.username;
    }
    public String getPassword() {
        return this.password;
    }
}

,视图模型类是

public class LoginViewModel implements IViewModel {
    private Subscription subscription;
    private ILoginDataListener dataListener;
    private Login login;
    Context context;

    String getUserName() {
        return this.login.getUsername();
    }
    LoginViewModel(Context ctx, Login login) {
        this.context = ctx;
        this.login = login;
    }
    public void onClickSubmit(View view) {
        Toast.makeText(context, "From View Model username is " + this.login.getUsername() + " the password " + this.login.getPassword(), Toast.LENGTH_SHORT).show();
        Toast.makeText(context, "From View Model", Toast.LENGTH_SHORT).show();
        loginRequest("Rajendra", "12345");
    }
    public void updateValue(View view) {
        this.login.password = "dummy";
        this.login.username = "simplefool";
    }
    @Override
    public void destroy() {
        if (subscription != null && !subscription.isUnsubscribed()) subscription.unsubscribe();
        subscription = null;
        context = null;
        dataListener = null;    
    }
}

From my comment:

日志中应该有更多的信息,不像平常那么漂亮,但是有更多。请把它寄出去,并把它格式化。但我确实认为数据绑定正在搜索setUserName方法(在您的Login.class中),该方法不存在,抛出错误。

方法也应该调用notifyPropertyChanged(BR.propertyName),正如你在评论中正确提到的。

在你的Login.class添加

public void setUsername(String username) { 
    this.username = username; 
    notifyPropertyChanged(BR.username); 
} 
public void setPassword(String password) { 
    this.password = password; 
    notifyPropertyChanged(BR.password); 
} 

最新更新