(点击
上方公众号
,可快速关注)
来源:伯乐在线专栏作者 - 王亟亟
链接:http://android.jobbole.com/84596/
点击 → 了解如何加入专栏作者
最近下班回家都在WOW,周末就爆肝,感觉人都要狗带了,昨天下午看了看 RxBinding 相关的功能,感觉还是蛮强大的,所提供的API也是相当丰富(基本Rx套餐都是互通的),然后就把之前的Rx例子翻出来重新写一下。
还是老规矩,先安利:
https://github.com/ddwhan0123/Useful-Open-Source-Android(这礼拜在拆资料/博客/学习那模块,之前叠的有点多,还在分割)
什么是RxBinDing? 有什么作用?(网上相关的介绍也有,我这里整合一下)
JakeWharton 提供了一套在 Android 平台上的基于 RxJava的 Binding API。
类似设置 OnClickListener 、设置 TextWatcher 这样的注册绑定对象的 API。
并对普通的控件,V4,V7等等做了相应的支持。
项目git:
https://github.com/JakeWharton/RxBinding
如何使用依赖RxBinding这里不说了,这里来说下匿名函数的问题
因为谷歌和甲骨文之间搞不清楚所以安卓支持java8的特性需要“特殊操作”,那为什么要用java8特性呢?别的不说,主要是
Lambda
,虽说这玩意可读性差,写起来自己绕晕,但是 省代码,省代码,省代码!!
在众多第三方支持插件里,比较推崇:https://github.com/evant/gradle-retrolambda
理由:不流氓+搭建简单
需要什么?
首先 你得下了java8,没下的话要去下载下,传送门:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
然后在你的gradle里配置如下(截图是怕有写小伙伴贴错地方):
这样就可以用java 8的新特性了。
因为只演示普通控件,所以就用(按钮啊,文本啊,选择框啊什么的都在里面)
compile
'com.jakewharton.rxbinding:rxbinding:0.4.0'
那就简单的搞个输入框,搞个按钮然后输入内容在TextView里显示就行。
废话不多说,直接上代码
public
class
MainActivity
extends
AppCompatActivity
{
Toolbar
toolBar
;
EditText
edit
;
TextView
result
;
Button
btn
;
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_main
);
init
();
logic
();
}
private
void
init
()
{
setSupportActionBar
(
toolBar
);
t
oolBar
=
(
Toolbar
)
findViewById
(
R
.
id
.
toolBar
);
result
=
(
TextView
)
findViewById
(
R
.
id
.
result
);
edit
=
(
EditText
)
findViewById
(
R
.
id
.
edit
);
btn
=
(
Button
)
findViewById
(
R
.
id
.
btn
);
}
private
void
logic
()
{
toolBar
.
setTitle
(
"RxAndroidDemo"
);
saveText
();
reFreshText
();
}
private
void
reFreshText
()
{
RxTextView
.
afterTextChangeEvents
(
edit
).
subscribe
(
textViewAfterTextC
hangeEvent
->
{
result
.
setText
(
textViewAfterTextChangeEvent
.
editable
().
toString
());
});
}
private
void
saveText
()
{
RxView
.
clicks
(
btn
)
// .subscribeOn(Schedulers.io())
// .observeOn(AndroidSchedulers.mainThread())
.
subscribe
(
new
Subscriber
()
{
@Override
public
void
onCompleted
()
{
result
.
setText
(
SharePreferencesTools
.
getString
(
MainActivity
.
this
,
"user"
)
+
" now "
);
}
@Override
public
void
onError