RxDialog(一) -- 一個基于RxJava的Dialog

效果圖

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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容