RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架。从简单的角度看,他移除了如addXXListener(),findViewById()这些不必要的代码,连如BufferKnife那样的InjectView都不需要,因为你的代码一般不需要依赖于这些界面组件信息。下面以一个最简单的AndroidMVVM为例。
Layout:
1
2
3
4
5
6
7
8
9
10
|
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
xmlns:bind=
"http://robobinding.org/android"
>
<TextView
bind:text=
"{hello}"
/>
...
<Button
android:text=
"Say Hello"
bind:onClick=
"sayHello"
/>
</LinearLayout>
|
Presentation Model:
1
2
3
4
5
6
7
8
9
10
|
public
class
PresentationModel
extends
AbstractPresentationModel {
private
String
name;
public
String
getHello() {
return
name +
": hello Android MVVM(Presentation Model)!"
;
}
...
public
void
sayHello() {
firePropertyChange(
"hello"
);
}
}
|
Activity将layout与对应的presentation model绑定在一起。
1
2
3
4
5
6
7
8
9
|
public
class
MainActivity
extends
Activity {
@Override
protected
void
onCreate(Bundle savedInstanceState) {
...
PresentationModel presentationModel =
new
PresentationModel();
View rootView = Binders.inflateAndBindWithoutPreInitializingViews(
this
, R.layout.activity_main, presentationModel);
setContentView(rootView);
}
}
|
这样layout的{hello}与PresentationModel.hello绑定,layout的sayHello与PresenationModel.sayHello方法绑定。我们不需要在Layout中定义TextView, Button的Id因为我们不关心,且没有必要。当我们进一步观察时,我们发现PresentationModel是一个Pure POJO。这也是为什么软件界的泰斗Martin Fowler在2004年,提出了Presenation Model(MVVM) 模式。它是我们所熟悉的MVC的升级,进一步的把界面状态与逻辑解藕到Presentation Model中。我们可以通过以下几个示例项目学习RoboBinding使用,他们都可以直接导入Android Studio无需额外配置:
1.AndroidMVVM,最小的RoboBinding使用例子。
2.Album Sample,是Martin Fowler的Presentation Model模式原始例子基于RoboBinding的Android翻译版本。
3.Gallery,是用于展示RoboBinding的各种特性的使用包含Fragment, Menu, ViewPager等。
项目的中文文档地址是:http://robobinding.github.io/RoboBinding/index.zh.html
github 地址https://github.com/RoboBinding/RoboBinding