2016-10-20 6 views
0

アンドロイド2ウェイデータバインディングライブラリの2ウェイデータバインディング機能を使用しようとしています。Androidデータバインディング: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}" 
     /> 

私はそれが

を仕事does notの結合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;  
    } 
} 
+0

を追加し、私はGradleのSDKツールやアンドロイドスタジオを更新する必要がある場合は、あなたのモデルクラス –

+0

を投稿してください。私にお知らせください 。現在Androidスタジオは2.2.1、グラデルバージョンは:gradle:2.2.1 androidBuildToolsVersion = '24 .0.1 ' –

+0

パブリッククラスLogin implements IBaseModel { public String username、password; パブリックログイン(文字列ユーザー名、文字列パスワード){ this.username = username; this.password = password; } public String getUsername(){ return this.username; } public String getPassword(){ return this.password; } } –

答えて

1

です:

ないなど、かなりのように、通常、ログの猫ではより多くの情報があるはずですが、より多くのがあります。投稿してフォーマットしてください。しかし、私は、データバインディングは存在しない、エラーを投げる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); 
} 
関連する問題