2016-10-20 4 views
0

Android 2 웨이 데이터 바인딩 라이브러리의 양방향 데이터 바인딩 기능을 사용하려고합니다. 내가 바인딩이 방법은 데이터에 대한 @={} 형식을 사용하는 경우가 Android 데이터 바인딩 : 두 데이터 바인딩에 @ = {} 구문을 사용하면 바인딩 파일이 생성되지 않습니다.

<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}" 
     /> 

작동 바인딩 간단한에 대한 라이브러리를 사용하는 것이

작동 나던 때

내 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}" 
     /> 

작동하지 않습니다. 다음 오류가 발생합니다.

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

는 모델 클래스 –

+0

을 게시 추가합니다. 저에게 알려주세요. 현재 안드로이드 스튜디오는 2.2.1이며, 그레이 버전은 다음과 같습니다 : gradle : 2.2.1 androidBuildToolsVersion = '24 .0.1 ' –

+0

public class 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에서

내가 Gradle을 SDK 도구 또는 안드로이드 스튜디오를 업데이트해야 할 경우

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

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