用RxJava和RxBinding发射用户点击
来源:互联网 发布:华为手机修改mac地址 编辑:程序博客网 时间:2024/05/20 21:21
在初步应用RxJava时发现,网上资料中Observable的创建例子主要使用create/just/from,都是将现在已有的数据序列整理为一个发射器,而我们最常见的应用却是现在没有数据序列,等待将来数据序列的到达,比如等待用户点击或输入,或等待网络来包,也即,我们其实需要一种手动的发射器,在数据到达后用来发送这些数据。那么怎样创建这种发射器呢?查询资料后发现有几个途径,下面用点击textview来示例。
第一类,使用RxBinding提供的RxView等直接封装输入控件,这是特别为Android定制的,自然也是最简单方便的:
private void rxview_click() { RxView.clicks(textView).subscribe(new Consumer<Object>() { @Override public void accept(Object o){ append_str(" "+((int) (Math.random() * 10))); } }); }
第二类,使用Observable.create(new ObservableOnSubscribe())来获取一个emitter发射器,并将这个发射器挂入textview的点击监听事件中,这样textview被点击时触发这个emitter发射器就可以了:
private void observable_emitter() { Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(@NonNull final ObservableEmitter<Integer> e) throws Exception { e.setCancellable(new Cancellable() { //when emitter send cancel, textview remove listener? @Override public void cancel() throws Exception { textView.setOnClickListener(null); } }); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { e.onNext((int) (Math.random() * 10)); } }); } }).subscribe(new Consumer<Integer>() { @Override public void accept(@NonNull Integer integer) throws Exception { append_str(" " + integer); } }); }
使用Flowable来替代Observable也是一样的:
private void flowable_emitter() { Flowable.create(new FlowableOnSubscribe<Integer>() { @Override public void subscribe(@NonNull final FlowableEmitter<Integer> e) throws Exception { textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { e.onNext((int) (Math.random() * 10)); } }); } }, BackpressureStrategy.MISSING).subscribe(new Consumer<Integer>() { @Override public void accept(@NonNull Integer integer) throws Exception { append_str(" " + integer); } }); }
第三类,也非常的简单清晰的,使用PushlishSubject:
private void publish_subject() { final PublishSubject<Integer> publishSubject = PublishSubject.create(); publishSubject.subscribe(new Consumer<Integer>() { @Override public void accept(@NonNull Integer integer) throws Exception { append_str(" " + integer); } }); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { publishSubject.onNext((int) (Math.random() * 10)); } }); }推荐一篇关于publishSubject的极简明清晰解释:https://blog.mindorks.com/understanding-rxjava-subject-publish-replay-behavior-and-async-subject-224d663d452f
上面所有例子的完整可以运行代码放在:https://github.com/maxyou/PublishSubjectDemo
阅读全文
0 0
- 用RxJava和RxBinding发射用户点击
- RxJava--RxBinding
- RxJava 和 RxAndroid 四(RxBinding的使用)
- RxJava 和 RxAndroid 四(RxBinding的使用)
- RxJava 和 RxAndroid 四(RxBinding的使用)
- RxJava 和 RxAndroid 四(RxBinding的使用)
- RxJava 和 RxAndroid 四(RxBinding的使用)
- 学习--RxJava 和 RxAndroid 四(RxBinding的使用)
- RxJava 和 RxAndroid 四(RxBinding的使用)
- RxJava 和 RxAndroid 四(RxBinding的使用)
- RxJava 和 RxAndroid 四(RxBinding的使用)
- RxJava 和 RxAndroid 四(RxBinding的使用)
- RxJava 和 RxAndroid 四(RxBinding的使用)
- Android RxJava RxAndroid Rxbinding 库
- RxJava+RxBinding 一些使用技巧
- 利用RxJava和 RxBinding实现倒计时按钮、关键词搜索和按钮防抖效果
- RxJava解决发射事件速度和消费事件速度不一致导致rx.exceptions.MissingBackpressureException
- 【RxJava Demo分析】(三)buffer操作符、RxBinding库
- JavaScript学习之图片淡入淡出
- Python学习X --- 推导式
- [HDU4669]Mutiples on a circle
- ajax 长轮循
- 激活函数的作用
- 用RxJava和RxBinding发射用户点击
- 数据结构实验之栈二:一般算术表达式转换成后缀式
- java算法之简单选择排序
- 数据结构实验之栈一:进制转换
- [随心译]2017.8.5-中国聊天机器人在拒绝说“我爱Communist Party”后被下线
- BZOJ 2886: 最短路/BZOJ 3260: 跳 乱搞
- Java:生成图片的缩略图
- 进程的简单介绍与实现
- 菜鸟学工具——maven认知