效果圖

Rxdialog.gif
看圖是和普通的Dialog一樣。
RxDialog的作用就是把一個普通的Dialog的按鈕點擊事件轉化成Rxjava的形式。
我們先來看下普通的創(chuàng)建Dialog的形式:
new AlertDialog.Builder(MainActivity.this)
.setTitle("title")
.setMessage("Message")
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
再來看下RxDialog的創(chuàng)建形式:
new MyRxDialog(MainActivity.this)
.setTitle("title")
.setMessage("Message")
.setPositiveText("確定")
.setNegativeText("取消")
.setNeutralText("中立")
.dialogToObservable()
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
switch (integer){
case MyRxDialog.POSITIVE:
Toast.makeText(MainActivity.this, "Positive", Toast.LENGTH_SHORT).show();
break;
case MyRxDialog.NEGATIVE:
Toast.makeText(MainActivity.this, "Negative", Toast.LENGTH_SHORT).show();
break;
case MyRxDialog.NEUTRAL:
Toast.makeText(MainActivity.this, "Neutral", Toast.LENGTH_SHORT).show();
break;
default:
Log.e("MyRxDialog", integer+"");
break;
}
}
});
具體實現(xiàn)
我們可以看到RxDialog和普通的Dialog的差別就在于dialogToObservable(),其實就是把click事件轉化為了Observable,這樣就可以支持Rxjava了。
接下來看下dialogToObservable()的實現(xiàn)方式:
public Observable dialogToObservable(){
return Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(@NonNull final ObservableEmitter<Integer> e) throws Exception {
DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
switch (i){
case -1:
e.onNext(POSITIVE);
break;
case -2:
e.onNext(NEGATIVE);
break;
case -3:
e.onNext(NEUTRAL);
break;
default:
e.onNext(i);
}
}
};
builder.setPositiveButton(positiveText, onClickListener);
builder.setNegativeButton(negativeText, onClickListener);
builder.setNeutralButton(neutralText, onClickListener);
builder.show();
}
});
}
這里其實就是創(chuàng)建了一個Observable,是不是很簡單,不過很多人可能會使用Flowable,這里也提供了。
public Flowable dialogToFlowable(){
return Flowable.create(new FlowableOnSubscribe() {
@Override
public void subscribe(@NonNull final FlowableEmitter e) throws Exception {
DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
switch (i){
case -1:
e.onNext(POSITIVE);
break;
case -2:
e.onNext(NEGATIVE);
break;
case -3:
e.onNext(NEUTRAL);
break;
default:
e.onNext(i);
}
}
};
builder.setPositiveButton(positiveText, onClickListener);
builder.setNegativeButton(negativeText, onClickListener);
builder.setNeutralButton(neutralText, onClickListener);
builder.show();
}
}, BackpressureStrategy.BUFFER);
}
核心代碼就這么多,具體實現(xiàn)請看源碼。

歡迎關注.jpg