Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 初涉Rx套餐 之RxBinding

初涉Rx套餐 之RxBinding

編輯:關於Android編程

最近下班回家都在WOW,周末就爆肝,感覺人都要GO DIE了,昨天下午看了看RxBinding相關的功能感覺還是蠻強大的,所提供的API也是相當豐富(基本Rx套餐都是互通的),然後就把之前的Rx例子翻出來重新寫一下。

還是老規矩,先安利:
Android">https://github.com/ddwhan0123/Useful-Open-Source-Android(這禮拜在拆資料/博客/學習那模塊,之前疊的有點多,還在分割)


什麼是RxBinDing?有什麼作用?(網上相關的介紹也有,我這裡整合一下)

JakeWharton 提供了一套在 Android 平台上的基於 RxJava的 Binding API。

類似設置 OnClickListener 、設置 TextWatcher 這樣的注冊綁定對象的 API。

並對普通的控件,V4,V7等等做了相應的支持。

項目git:
https://github.com/JakeWharton/RxBinding

如何使用依賴RxBinding這裡不說了,這裡來說下匿名函數的問題

因為谷歌和甲骨文之間搞不清楚所以安卓支持java8的特性需要“特殊操作”,那為什麼要用java8特性呢?別的不說,主要是 Lambda,雖說這玩意可讀性差,寫起來自己繞暈,但是 省代碼,省代碼,省代碼!!

在眾多第三方支持插件裡,比較推推崇:https://github.com/evant/gradle-retrolambda

理由:不流氓+搭建簡單

需要什麼?

首先 你得下了java8,沒下的話要去下載下,傳送門:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

然後在你的gradle裡配置如下(截圖是怕有寫小伙伴貼錯地方):

這裡寫圖片描述

這裡寫圖片描述

這樣就可以用java 8的新特性了。

因為只演示普通控件,所以就用(按鈕啊,文本啊,選擇框啊什麼的都在裡面)<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;"> compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'

那就簡單的搞個輸入框,搞個按鈕然後輸入內容在TextView裡顯示就行。

廢話不多說,直接上代碼

public class MainActivity extends AppCompatActivity {
    Toolbar toolBar;
    EditText edit;
    TextView result;
    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();
        logic();
    }

    private void init() {
        setSupportActionBar(toolBar);
        toolBar = (Toolbar) findViewById(R.id.toolBar);
        result = (TextView) findViewById(R.id.result);
        edit = (EditText) findViewById(R.id.edit);
        btn = (Button) findViewById(R.id.btn);
    }

    private void logic() {
        toolBar.setTitle("RxAndroidDemo");

        saveText();
        reFreshText();
    }

    private void reFreshText() {
        RxTextView.afterTextChangeEvents(edit).subscribe(textViewAfterTextChangeEvent -> {
            result.setText(textViewAfterTextChangeEvent.editable().toString());
        });
    }

    private void saveText() {
        RxView.clicks(btn)
//                .subscribeOn(Schedulers.io())
//                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber() {
                    @Override
                    public void onCompleted() {
                        result.setText(SharePreferencesTools.getString(MainActivity.this, "user") + " now ");

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Void aVoid) {
                        SharePreferencesTools.putString(MainActivity.this, "user", edit.getText().toString().trim());
                        onCompleted();
                    }
                });
    }
}

這邊的Demo並沒有用注解獲取對象,實際上組合拳套餐會用的更舒服點,畢竟有插件一鍵find。

我們這些”RxView”的行為還是要在onCreate裡執行了(盡管用戶不點不觸發,但是你還得像平時setListener那樣先把行為注冊掉)

EditText用RxTextView,其他一些還是用RxView.

api提供了 諸如textChanges ,afterTextChangeEvents等一系列替代之前回調的方法,進一步擺脫“回調地獄”。

因為是Rx套餐,所以那些線程行為,異步行為,.map() .first()等等等方法都可以用

這邊提再一個“優化”的問題

當你邏輯結束了不用了,之前訂閱的被觀察者與觀察者的關系請做取消訂閱操作,調用 unsubscribe()就行

源碼地址:
https://github.com/ddwhan0123/RxAndroidDemo/tree/master/RxAndroidGlideDemo

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved