2017-10-29 4 views
-1

TextView를 JodaTime 날짜에 바인딩하여 날짜 값을 프로그래밍 방식으로 변경하면 TextView도 함께 변경됩니다. 나는 그것을 처음 보여 주는데 성공했지만 날짜가 바뀌면보기가 업데이트되지 않습니다.bind TextView to date

텍스트 뷰 :

<TextView 
      android:id="@+id/day" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@{mainViewModel.day}" /> 

뷰 모델 :

public class RoomListViewModel extends Observable{ 
    private LocalDate day; 


public String getDay(){ 
     return day.toString("dd/MM/yyyy"); 
    } 

    public void previousDay() { 
     day = day.plusDays(1); 
     setChanged(); 
     notifyObservers(); 
    } 

    public void nextDay() { 
     day = day.minusDays(1); 
     setChanged(); 
     notifyObservers(); 
    } 

나는 무엇을 놓치고?

답변

2

변수 이름이 실제로 혼란 스럽습니다.

TextViewString 유형과 작동하기 때문에 getDay() 메서드를 호출합니다. 이 경우에는 ObservableField<LocalDate> day이 (레이아웃에서) 호출되지 않습니다.

동적으로 레이아웃을 변경하려면 @Bindanble 주석을 사용해야합니다.

예 : 귀하의 ViewModel은 (가능한 경우) BaseObservable에서 상속 할 필요가 또는 Observable 인터페이스를 (그냥 BaseObservable 구현을 복사 할 수 있습니다)를 구현

private LocalDate mDay; 

@Bindable 
public String getDay(){ 
    return mDay.toString("dd/MM/yyyy"); 
} 

public void previousDay() { 
    mDay = mDay.plusDays(1); 
    notifyPropertyChanged(BR.day); // you will have to import this (something like com.yourproject.BR) 
} 

public void nextDay() { 
    mDay = mDay.minusDays(1); 
    notifyPropertyChanged(BR.day); 
} 

.

[간단한 구문 오류를 포함 할 수 있습니다, 그것을 내장하지 않았] 내 ViewModel을 이미 java.util.Observable의 확장

+0

, 내 구성 그렇게하는 방법을 볼 수 없습니다. databinding.Observable을 구현하면 addOnPropertyChangedCallback을 사용하여 속성의 변경 사항을 청취해야하지만 그렇게하는 방법은 무엇입니까? –

+1

안드로이드 데이터 바인딩은'java.util.Observable'에서 작동하지 않습니다. 그것은 'android.databinding.Observable'과 함께 작동합니다. 이것을 확장하는 대신 이미 구현이 필요한'BaseObservable'에서 확장하십시오. 그런 다음'notifyPropertyChanged (BR.day);를 호출하십시오. – mlyko

+0

네, 불행히도이 앱은 그런 식으로 만들어졌습니다. 이 특별한 경우에 대한 빠른 수정이 필요했습니다. 어쨌든 유용한 정보에 감사드립니다. :) –