j2e*_*nue 7 android rx-java rx-android
在android中我有一个像这样定义的文本视图:
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:textColorHighlight="#000000"
android:textIsSelectable="true" />
Run Code Online (Sandbox Code Playgroud)
我的目标是在点击4次之后,我想开始一项新活动.我需要用RXJava做到这一点; 这是一项要求.或者rxAndroid,rxBinding等等.
我的活动如下:
public class MainActivity extends Activity implements onClickListener {
TextView tv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.text1);
tv.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.text1){
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:但这只是标准的做法.必须有一种方法可以使用反应式rxJava API.
因此onClicklistener,rxBinding我可以这样做,而不是使用with I read.
RxView.clicks(tv).flatMap(tv -> {
// another observable which can throw onError.
return Observable.error(null);
}).subscribe(object -> {
Log.d("CLICK", "textview clicked", start activity);
}, error -> {
Log.d("CLICK", "ERROR");
});
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式使用命令rxBinding使其仅在4次点击后执行吗?我不打算存储静态变量,或者使用匿名类并将成员变量存储为count.应该有一个可观察的方法.
你可以用这样的东西来实现:
Observable.create((Observable.OnSubscribe<Void>) subscriber -> {
if (!subscriber.isUnsubscribed()) {
button.setOnClickListener(v -> subscriber.onNext(null));
}
}).buffer(1000, TimeUnit.MILLISECONDS)
.filter(clicks -> clicks.size() == 4)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(clicks -> {
Log.d("CLICK", "CLICK");
});
Run Code Online (Sandbox Code Playgroud)
buffer() - 收集1s窗口的点击次数filter() - 过滤所有发出的缓冲项,其中缓冲区中的项数不等于4(禁用双击,三击,五次点击)最难的部分是指定缓冲时间"窗口".一秒钟有时不够,但在其他情况下,用户必须等待几毫秒.
您可以创建一个可观察量,以便在每次单击按钮时发出,然后计算它发出的总次数,并使用过滤器,以便您的订阅者只有在发出四次后才会看到它。
Observable<View> buttonObservable = ViewObservable.clicks(initiateButton, false);
buttonObservable.count()
.filter(count -> (count >= 4))
.subscribe(object -> {
//Your code here
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5014 次 |
| 最近记录: |