RxJava 和 RxAndroid 四(RxBinding的使用)
對Rxjava不熟悉的同學可以先看我之前寫的幾篇文章
前言:RxBinding 是 Jake Wharton 的一個開源庫,它提供了一套在 Android 平臺上的基於 RxJava的 Binding API。所謂 Binding,就是類似設定 OnClickListener 、設定 TextWatcher 這樣的註冊繫結物件的 API。
一:git地址
二、androidStudio 使用
一般的包下面就用
compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
v4'support-v4' library bindings:
compile 'com.jakewharton.rxbinding:rxbinding-support-v4:0.4.0'
'appcompat-v7' library bindings:
compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:0.4.0'
'design' library bindings:
compile 'com.jakewharton.rxbinding:rxbinding-design:0.4.0'
三、程式碼示例
-
Button 防抖處理
button = (Button) findViewById( R.id.bt ) ; RxView.clicks( button ) .throttleFirst( 2 , TimeUnit.SECONDS ) //兩秒鐘之內只取一個點選事件,防抖操作 .subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { Toast.makeText(MainActivity.this, "點選了", Toast.LENGTH_SHORT).show(); } }) ;
-
按鈕的長按時間監聽
button = (Button) findViewById( R.id.bt ) ; //監聽長按時間 RxView.longClicks( button) .subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { Toast.makeText(MainActivity.this, "long click !!", Toast.LENGTH_SHORT).show(); } }) ;
-
listView 的點選事件、長按事件處理
listView = (ListView) findViewById( R.id.listview ); List<String> list = new ArrayList<>() ; for ( int i = 0 ; i < 40 ; i++ ){ list.add( "sss" + i ) ; } final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1 ); adapter.addAll( list ); listView.setAdapter( adapter ); //item click event RxAdapterView.itemClicks( listView ) .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { Toast.makeText(ListActivity.this, "item click " + integer , Toast.LENGTH_SHORT).show(); } }) ; //item long click RxAdapterView.itemLongClicks( listView) .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { Toast.makeText(ListActivity.this, "item long click " + integer , Toast.LENGTH_SHORT).show(); } }) ;
- 使用者登入介面,勾選同意隱私協議,登入按鈕就變高亮
button = (Button) findViewById( R.id.login_bt );
checkBox = (CheckBox) findViewById( R.id.checkbox );
RxCompoundButton.checkedChanges( checkBox )
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
button.setEnabled( aBoolean );
button.setBackgroundResource( aBoolean ? R.color.button_yes : R.color.button_no );
}
}) ;
```
效果圖
-
搜尋的時候,關鍵詞聯想功能 。debounce()在一定的時間內沒有操作就會發送事件。
editText = (EditText) findViewById( R.id.editText ); listView = (ListView) findViewById( R.id.listview ); final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1 ); listView.setAdapter( adapter ); RxTextView.textChanges( editText ) .debounce( 600 , TimeUnit.MILLISECONDS ) .map(new Func1<CharSequence, String>() { @Override public String call(CharSequence charSequence) { //get the keyword String key = charSequence.toString() ; return key ; } }) .observeOn( Schedulers.io() ) .map(new Func1<String, List<String>>() { @Override public List<String> call(String keyWord ) { //get list List<String> dataList = new ArrayList<String>() ; if ( ! TextUtils.isEmpty( keyWord )){ for ( String s : getData() ) { if (s != null) { if (s.contains(keyWord)) { dataList.add(s); } } } } return dataList ; } }) .observeOn( AndroidSchedulers.mainThread() ) .subscribe(new Action1<List<String>>() { @Override public void call(List<String> strings) { adapter.clear(); adapter.addAll( strings ); adapter.notifyDataSetChanged(); } }) ;
執行效果
總結:
-
RxBinding
就是把釋出--訂閱
的模式用在了android控制元件的點選,文字變化上。通過 RxBinding 把點選監聽轉換成 Observable 之後,就有了對它進行擴充套件的可能。 -
RxBinding
和rxlifecycle
結合起來使用,可以控制控制元件監聽的生命週期。關於rxlifecycle
的使用,請參照RxJava 和 RxAndroid 三(生命週期控制和記憶體優化) -
最後我的個人微信公眾號是:
zhaoyanjun125
, 歡迎關注
相關推薦
RxJava 和 RxAndroid 四(RxBinding的使用)
對Rxjava不熟悉的同學可以先看我之前寫的幾篇文章 前言:RxBinding 是 Jake Wharton 的一個開源庫,它提供了一套在 Android 平臺上的基於 RxJava的 Binding API。所謂 Binding,就是類似設定 OnClickListener 、設定
RxJava 和 RxAndroid 三(生命週期控制和記憶體優化)
rxjava rxandroid 趙彥軍 RxJava使我們很方便的使用鏈式程式設計,程式碼看起來既簡潔又優雅。但是RxJava使用起來也是有副作用的,使用越來越多的訂閱,記憶體開銷也會變得很大
RxJava 和 RxAndroid 二(操作符的使用)
前言:對Rx不瞭解的朋友可以先看我的第一篇博文 ,是對Rxjava的基本介紹 1、merge操作符,合併觀察物件 19 List<String> list1 = new ArrayList<>() ; 20 List<String&g
RxJava 和 RxAndroid 五(執行緒排程)
對rxJava不瞭解的同學可以先看 本文將有幾個例子說明,rxjava執行緒排程的正確使用姿勢。 例1 Observable .create(new Observable.OnSubscribe<String>() {
C語言中存儲類別又分為四類:自動(auto)、靜態(static)、寄存器的(register)和外部的(extern)。
字符變量 修飾 例如 register ext 進行 適合 sta -- 除法運算中註意: 如果相除的兩個數都是整數的話,則結果也為整數,小數部分省略,如8/3 = 2;而兩數中有一個為小數,結果則為小數,如:9.0/2 = 4.500000。 取余運算中註意: 該運算只適
C# 《四》表達式和運算符(1)
center key 操作 mes string src ring mage ons 1、表達式 1、將變量和字面值(在使用運算符時,它們都稱作操作數)與運算符組合起來就得到了表達式,它是計算的基本構件。 2、簡單的操作包括所有的基本數學操作,如加減乘除;還有專門用於處理布
C# 《四》表達式和運算符(2)
技術分享 -a 按位運算 表達式 其他 img 數學 tro .cn 1、位運算符 1、位(bit):在計算中存儲所有數據都采用二進制,那麽二進制的位,便是我們所說的 bit。 1)1Byte = 8bit 1字節 = 8位 2)1k =10
rxJava和rxAndroid原始碼解析系列四之subscribeOn和observeOn的理解(學習終結篇)
本篇文章主要解決subscribeOn和observeOn這兩個方法為什麼subscribeOn只有一次有效果,observeOn切換多次回撥的都有效果。 不知道朋友有沒有看過rxandroid的原始碼,如果看過的話,就會迎刃而解,沒什麼疑慮啦。沒看過原始碼的朋友,可以看看我這個系列的前幾篇文章
C#基礎知識-函數的定義和調用(五)
返回 {0} string 訪問修飾符 容器 列表 rdquo 所有 func 函數也可以稱為方法,可以很方便的把一些行為封裝到函數裏面,當調用這一函數時會把函數塊裏面的代碼按照順序執行,方法可以有多種形式,有無參數,有無返回值等。 1. 函數的定義 函數定
ThreadPoolExecutor的應用和實現分析(中)—— 任務處理相關源碼分析
stateless 自身 tran als row exce 繼承 break attribute 轉自:http://www.tuicool.com/articles/rmqYjq 前面一篇文章從Executors中的工廠方法入手,已經對ThreadPoolExecuto
命令和符號總結(二)
命令2017-05-13隨記—————————————————————————————— 20.uname 顯示系統內核信息 -r 顯示內核版本 -m 32位,64位本文出自 “一個Linux小白-學習運維” 博客,謝絕轉載!命令和符號總結(二)
黑盒測試用例設計-功能圖法和場景法(八)
重新 感覺 結果 軟件 簡單 可能 遷移 面向 通話 7.功能圖法 一個程序的功能包括靜態和動態說明。動態說明描述輸入數據的次序或轉移的次序,和業務流程緊密對應。靜態說明描述了輸入輸出條件之間的對應關系。對於面向市場的產品,其邏輯復雜、組合龐大,必須用動態說明
JS函數和對象(一)
inf ack bsp 用法 .cn 求和 封裝 obj [0 在本文章中,將對JS中的函數和對象進行一些講解,不對之處還請之處 一.JS中的函數 1.1無參函數 其形式如下代碼所示 function box(){ alert("我是一個函數,只有被調用才會執行
抽象類(abstract class)和接口(interface)有什麽異同?
否則 繼承 默認 strong 什麽 成員 -s 實例 abstract 相同點: 1.抽象類和接口都不能被實例化,但可以定義抽象類和接口類型的引用。 2.一個類如果繼承了抽象類和接口,必須要對其中的抽象方法全部實現。(接口中方法默認的是public abstract修飾的
HTML提交方式post和get區別(實驗)
des url action 通過 性別 清除數據 map pass pack HTML提交方式post和get區別(實驗) 一、post和get區別 get提交,提交的信息都顯示在地址欄中。 post提交,提交的信息不顯示地址欄中,顯示在消息體中。 二、客戶端代碼
html中相對(relative),絕對(absolute)位置以及float的學習和使用案例 (轉)
邊距 col top 20px pre 其他 fff 例如 pan 這幾天著手於CSS的研究,研究的原因主要是工作需要,最近發現如果做前端僅僅會javascript很難盡善盡美,當然懂樣式和html在一定程度上可以讓我們更近一步。 css較為簡單,由於個人擅長編寫代碼,所以
《UNIX環境高級編程》讀書筆記之系統數據文件和信息(1)
返回 -m 獲取 高級編程 記得 clas oid data- size 1.UNIX系統口令文件包括了下圖所看到的的各字段,這些字段包括在<pwd.h>中定義的passwd結構體中 POSIX定義了兩個獲取口令文件項的函數。在給出用戶登錄名或用戶ID後
9.9遞歸和動態規劃(九)——N皇後
其它 ace req case create lac any urn distance /** * 功能:打印八皇後在8*8棋盤上的各種擺法。當中每一個皇後都不同行、不同列,也不在對角線上。 * 這裏的“對角線”指的是全部的對角線,不僅僅是平分整個棋盤的那兩
數據庫的三大範式和五大約束(轉)
date 查看 引擎 uniq 文件 緩沖 運行 數值 alt 一、三大範式: 1. 第一範式(1NF):數據表中的每一列(每個字段)必須是不可拆分的最小單元,也就是確保每一列的原子性; 2. 第二範式(2NF):滿足1NF後,要求表中的所有列,都必須依賴於主鍵,而
第6章 靜態路由和動態路由(1)_靜態路由
align 將在 跟蹤 添加 測試 字母 ppp協議 必須 缺少 1. 路由——網絡層實現的功能 1.1 路由功能 (1)網絡層的功能:給傳輸層協議提供簡單靈活的、無連接的、盡最大努力交付的數據包服務。 (2)路由器為每一個數據包單獨地選擇轉發路徑,網絡層並不提供服務質量的