본문 바로가기

카테고리 없음

DataBinding (3)

반응형

데이터 객체


 extends BaseObservable

을 상속받아  


private static class User extends BaseObservable {
   
private String firstName;
   
private String lastName;
   
@Bindable
   
public String getFirstName() {
       
return this.firstName;
   
}
   
@Bindable
   
public String getLastName() {
       
return this.lastName;
   
}
   
public void setFirstName(String firstName) {
       
this.firstName = firstName;
       notifyPropertyChanged
(BR.firstName);
   
}
   
public void setLastName(String lastName) {
       
this.lastName = lastName;
       notifyPropertyChanged
(BR.lastName);
   
}
}


getter에 @Bindable  을 명시하면 값의 변경을 처리해준다


@Bindable 주석을 사용하면 BR 항목을 생성하고, 
PropertyChangeRegistry()

를 이용해서 갱신한다.




직접 만들어주기 귀찮고, 복잡한 부분이 아니라면 

Observable  ObservableField ObservableBooleanObservableByteObservableCharObservableShortObservableIntObservableLongObservableFloatObservableDoubleObservableParcelable


등을 이용해서 처리할 수도 있다 


private static class User {
   
public final ObservableField<String> firstName =
       
new ObservableField<>();
   
public final ObservableField<String> lastName =
       
new ObservableField<>();
   
public final ObservableInt age = new ObservableInt();
}

위와 같이 사용할 수 있다 (Gson형으로 사용하려면 직접 Bindable해주고 Observable해주는 것이 좋을 것 같다(아직 확실한건 아니고 추측이라 테스트 해봐야 함)


String 같은 참조형일 때에는 Map 형태로


ObservableArrayMap<String, Object> user = new ObservableArrayMap<>();
user
.put("firstName", "Google");
user
.put("lastName", "Inc.");
user
.put("age", 17);


<data>
   
<import type="android.databinding.ObservableMap"/>
   
<variable name="user" type="ObservableMap&lt;String, Object&gt;"/>
</data>

<TextView
   
android:text='@{user["lastName"]}'
   
android:layout_width="wrap_content"
   
android:layout_height="wrap_content"/>
<TextView
   
android:text='@{String.valueOf(1 + (Integer)user["age"])}'
   
android:layout_width="wrap_content"
   
android:layout_height="wrap_content"/>

키가 정수일 때는 ObservableArrayList


ObservableArrayList<Object> user = new ObservableArrayList<>();
user
.add("Google");
user
.add("Inc.");
user
.add(17);
<data>
   
<import type="android.databinding.ObservableList"/>
   
<import type="com.example.my.app.Fields"/>
   
<variable name="user" type="ObservableList&lt;Object&gt;"/>
</data>

<TextView
   
android:text='@{user[Fields.LAST_NAME]}'
   
android:layout_width="wrap_content"
   
android:layout_height="wrap_content"/>
<TextView
   
android:text='@{String.valueOf(1 + (Integer)user[Fields.AGE])}'
   
android:layout_width="wrap_content"
   
android:layout_height="wrap_content"/>


View 바인딩 방법 모음


MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater);
MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater, viewGroup, false);


MyLayoutBinding binding = MyLayoutBinding.bind(viewRoot);


ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater, layoutId,
    parent
, attachToParent);
ViewDataBinding binding = DataBindingUtil.bindTo(viewRoot, layoutId);





















반응형