Android AutoCompleteTextView动态自动补全
上一次写了
什么是Rxjava
RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。
Github原址:
观察者模式
观察者:关系着监视被观察者的行为,当被观察者某个状态改变的时候会通知观察者,观察者会执行对应的操作。
被观察者:被监视的对象,某个当状态改变的时候会通知观察者。
订阅:将观察者和被观察者建立联系。
在程序中的具体表示
观察者:Observer。
被观察者:Observable。
订阅:subscribe()。
使用
首先在gradle中添加依赖:
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
一次Rxjava的简单使用:
RxTextView.textChanges(act)
.debounce(10, TimeUnit.MILLISECONDS)
.skip(1)/*去掉第一次选中*/
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<CharSequence>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(final CharSequence charSequence) {
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "对Error事件作出响应" );
}
@Override
public void onComplete() {
Log.d(TAG, "对Complete事件作出响应");
}
});
其中比较重要的就是OnNext()方法 它的作用是当用户输入的Textview发生改变的时候执行的方法。可以在里面写上自己发送至服务器请求的代码比如:
@Override
public void onNext(final CharSequence charSequence) {
new Thread() {
public void run() {
ChatMessage chat = SearchHttp.sendMessage(charSequence.toString());
Message message = new Message();
message.what = 0x1;
message.obj = chat;
handler2.sendMessage(message);
}
}.start();
}
这里我采用的是使用一个新的线程对Http发送参数至服务器取值然后通过Mseeage 和Handler传值来进行相应的操作。
这里我推荐建一个新的线程来执行操作 因为实际情况下如果不新建线程的话你的app会奔溃。
这里再说明一下操作符的使用
.debounce(10, TimeUnit.MILLISECONDS)
.skip(1)/*去掉第一次选中*/
.observeOn(AndroidSchedulers.mainThread())
其中第一个操作符debounce表示只有当用户输入关键字后10毫秒才发射数据[说的直白点就是10毫秒后才会走后面的逻辑]。
skip表示当用户第一次选中Textview的时候并不会执行程序 也就是说防止程序将第一次选中的空白字符发送到服务器 避免没有必要的错误。
比较全面的Rxjava操作符链接Android RxJava:这是一份全面 & 详细 的RxJava操作符 使用攻略
Rxjava的功能比较强大 还有许多强大的功能没有使用 后面用到的话会陆续补充。