RxBinding系列之RxCompoundButton(三)

前言

本篇將通過一個實際場景來學習RxBinding中的RxCompoundButton,J大神將Android中CompoundButton的一些事件及動作加以RxJava的觀察者模式并封裝了起來就形成了RxCompoundButton,使用起來也很簡單。
  
場景:注冊時需用戶點擊同意用戶協(xié)議選中框才可點擊注冊按鈕。

布局

布局中更需要一個注冊Button和一個用戶協(xié)議選中框CheckBox。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="15dp"
    tools:context="com.leiholmes.rxbindingdemo.ui.RxCompoundButtonActivity">

    <Button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorGray"
        android:text="注冊" />

    <CheckBox
        android:id="@+id/cb_contract"
        android:layout_width="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_height="wrap_content"
        android:text="用戶協(xié)議" />
</LinearLayout>

Activity

View注入

使用ButterKnife獲取Button與CheckBox實例。

@BindView(R.id.btn_login)
Button btnLogin;
@BindView(R.id.cb_contract)
CheckBox cbContract;

checkedChanges選中狀態(tài)改變事件

RxCompoundButton.checkedChanges(CompoundButton view),內部封裝了OnCheckedChangeListener選中狀態(tài)改變監(jiān)聽。

//默認注冊按鈕不可點擊
btnLogin.setEnabled(false);
addDisposable(RxCompoundButton.checkedChanges(cbContract)
        .subscribe(aBoolean -> {
            RxView.enabled(btnLogin).accept(aBoolean);
            btnLogin.setBackgroundResource(aBoolean ? R.color.colorPrimary : R.color.colorGray);
            RxTextView.color(btnLogin).accept(aBoolean ? Color.parseColor("#ffffff") :
                    Color.parseColor("#000000"));
        }));
addDisposable(RxView.clicks(btnLogin)
        //防抖2s
        .throttleFirst(2, TimeUnit.SECONDS)
        .subscribe(o -> Toast.makeText(RxCompoundButtonActivity.this, "注冊成功",
                Toast.LENGTH_SHORT).show()));

默認注冊按鈕不可點擊,當CheckBox被選中后則可點擊注冊,并修改注冊按鈕的樣式。

View操作

RxCompoundButton中也封裝了CompoundButton中例如setchecked()toggle()等常用的操作,使用方式如下:

addDisposable(RxView.clicks(btnLogin)
        .subscribe(o -> {
            RxCompoundButton.checked(cbContract).accept(true);
            RxCompoundButton.toggle(cbContract).accept(null);
        }));

運行效果

最后看一下運行效果Gif。


運行效果

本文疑問

addDisposable()方法什么鬼?

飛機到本系列第一篇有講解:
RxBinding系列之RxView(一)

Lambda表達式什么鬼?

飛機到我寫的Lambda表達式教程:
Lambda表達式基本語法與應用

總結

通過實際場景來學習新知識掌握起來肯定比死啃理論快,建議碼友們都上手試試。

進階中的碼猿一枚,寫的不對的地方歡迎大神們留言指正,有什么疑惑或者建議也可以在我Github上RxBindingDemo項目Issues中提出,我會及時回復。

附上Demo的地址:
RxBindingDemo

另外:歡迎光臨我的Hexo個人博客:Lei’s Blog

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

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,745評論 25 709
  • 2017.02.22 可以練習,每當這個時候,腦袋就犯困,我這腦袋真是神奇呀,一說讓你做事情,你就犯困,你可不要太...
    Carden閱讀 1,490評論 0 1
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實...
    香橙柚子閱讀 24,697評論 8 183
  • 先說一下這篇文章里面的內容:TCP 客戶端, 自定義對話框, 自定義按鈕, ProgressBar豎直顯示, 重力...
    楊奉武閱讀 3,892評論 0 3
  • 或許,是到了年紀。 或許,是想法太多 或許,是生活太膩 或許,是想做自己 或許,是想自由 或許...... 確定!...
    一個人單純點閱讀 285評論 0 0

友情鏈接更多精彩內容