編輯:關於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
本示例以Servlet為例,演示Android與Servlet的通信。眾所周知,Android與服務器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方
在工作中又很多需求都不是android系統自帶的控件可以達到效果的,內置的TabHost就是,只能達到簡單的效果 ,所以這個時候就要自定義控件來達到效果:這個效果就是:
在android開發中會碰到有頂部導航並且下面顯示的內容是一個listview,此時要想實現左右滑動切換頂部導航的選項是不能實現的,因為listview自己消耗橫向滑動事
ImageView有scaleType屬性可以縮放圖片,讓圖片鋪滿屏幕寬度,但是會出現壓縮或裁剪的情況。ImageView的scaleType的屬性分別是ma