Android Data Binding代碼實戰
本文介紹使用Android Data Binding技術,結合豆瓣電影搜索API,在RecycleView中展示電影列表。
代碼實現
我根據 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>
創建Binding類在RecyclerView的Adapter的onCreateViewHolder中創建Binding類
</div> </li>MovieItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.movie_item, parent, false);
設置變量值在onBindViewHolder中設置layout中定義的movie變量值
Movie movie = mMovies.get(position); holder.binding.setVariable(com.aswifter.databinding.BR.movie, movie); holder.binding.executePendingBindings();</li>
顯示圖片使用Glide顯示圖片,ivMovie是MovieItemBinding根據ImageView的id自動生成的
Glide.with(MovieActitiviy.this) .load(movie.getImages().getMedium()) .fitCenter() .into(holder.binding.ivMovie);</li> </ul>
DataBinding參考
可以閱讀以下文章:
一些感想
- Model的定義還是比較麻煩,需要寫標注和通知方法,希望后續有相應的Android Studio插件自動生成。
- Binding類自動生成View對應的字段,不用寫findViewById了,這點很爽。
- 代碼結構更清晰,使用MVVM模式分層的思想,Model層只負責數據,
我把網絡請求和Json解析的方法都寫到Model中,Activity基本上與Model解耦了,
以后更換接口,HTTP庫或JSON庫,都不需要動Activity,代碼測試也更方便。- Data Binding目前只能實現單向綁定,期待以后能支持雙向綁定。
</ul>Github
代碼已經發布到Github,
源碼地址: AndroidDataBindingExample
</div> 原文 http://www.aswifter.com/2015/07/11/android-data-binding-example/本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!相關經驗
相關資訊
sesese色