Android Data Binding代碼實戰

jopen 9年前發布 | 50K 次閱讀 Android開發 移動開發 Android Data Binding

本文介紹使用Android Data Binding技術,結合豆瓣電影搜索API,在RecycleView中展示電影列表。

Android Data Binding代碼實戰

代碼實現

我根據 MVVM(Model-View-ViewModel) 的順序介紹代碼實現。

Model層

Model層我定義了一個 Movie 類,要獲得通知UI更新的功能,需要繼承 BaseObservable 類;

如果要能被View綁定,需要在get方法上添加 @Bindable 標注,同時在set方法中要調用 notifyPropertyChanged(BR.title) 方法通知View更新。

</div>

BR類會根據 @Bindable 標注自動生成

</div>

public class Movie extends BaseObservable {
    private String id;
    private String title;
    private String original_title;
    private String year;
    private Images images;
    private Rating rating;

@Bindable
public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
    notifyPropertyChanged(BR.title);
}

@Bindable
public String getDescription() {
   return this.original_title + "\n" + this.getYear();
}

public void setOriginal_title(String original_title) {
    this.original_title = original_title;
    notifyPropertyChanged(BR.description);
}

public void setYear(String year) {
    this.year = year;
    notifyPropertyChanged(BR.description);
}

...

}</pre>

我定義了一個getDescription方法,將original_title和year組合在一起,

在View層也能進行綁定,getDescription相關的字段值發生變化后,

需要在set方法中調用 notifyPropertyChanged 通知View更新內容。

</div>

View層

需要在布局文件中使用 layout 作為最外層布局,同時在其中的 data 區域中聲明一個movie變量,

并指定類型為我們在Model中定義的 Movie 類。

</div>

在View中使用@{movie.title}這樣的表達式, 將變量進行綁定。

<layout xmlns:android="

... </layout></pre>

ViewModel層

定義好了Model和View之后,需要把兩者連起來,當Model的數據變化后,自動更新View。

Android Data Binding中的ViewModel是根據layout自動生成的Binding類,

如果layout的名稱是 movie_item.xml ,生成的Binding類名稱就是MovieItemBinding。

</div>