編輯:關於android開發
學了一段時間android,看了部分的項目代碼,然後想想老是學基礎也夠枯燥乏味的,那麼就來學習學習新東西吧,相信很多學java的都聽說過RxJava,那麼android下也有RxAndroid。
RxJava最核心的兩個東西是Observables(被觀察者,事件源)和Subscribers(訂閱者)。Observables發出一系列事件,Subscribers處理這些事件。這裡的事件可以是任何你感興趣的東西,觸摸事件,web接口調用返回的數據等等。
關於RxAndroid的github:https://github.com/ReactiveX/RxAndroid。
新建emRxAndroidStudy工程, 然後在build.grade的dependencies裡添加:
compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.0'
package com.jared.emrxandroidstudy;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import rx.Observable;
import rx.Subscriber;
@EMLayoutBinder(R.layout.activity_main)
public class MainActivity extends BaseActivity {
private static final String TAG = "MainActivity";
private Subscriber subscriber;
private Observable observable;
@EMViewBinder(R.id.hello)
private TextView mHello;
@EMViewBinder(R.id.test1)
private Button mTest1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
createSubscriber();
}
private void bindSubscriber() {
observable.subscribe(subscriber);
}
private void createSubscriber() {
subscriber = new Subscriber() {
@Override
public void onCompleted() {
Log.d(TAG, "onCompleted");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(String t) {
Log.d(TAG, "onNext");
mHello.setText(t);
}
};
}
private String getHello() {
return "Hello RxAndroid";
}
private String getHello1() {
return "Hello RxAndroid 1";
}
@EMOnClickBinder({R.id.test1})
public void myOnClick(View view) {
switch (view.getId()) {
case R.id.test1:
createObservable();
break;
default:
break;
}
}
private void createObservable() {
Log.d(TAG, "observable");
observable = Observable.create(new Observable.OnSubscribe() {
@Override
public void call(Subscriber subscriber) {
subscriber.onNext(getHello());
subscriber.onCompleted();
}
});
bindSubscriber();
}
}
布局文件如下:
<!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%2D%2D%3E-->
<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" tools:context="com.jared.emrxandroidstudy.MainActivity">
<textview android:id="@+id/hello" android:text="Hello World!" android:layout_width="wrap_content" android:layout_height="wrap_content"><button android:id="@+id/test1" android:text="Test" android:layout_width="match_parent" android:layout_height="wrap_content" android:textallcaps="false"></button></textview></linearlayout>
這裡創建了Observable,用來發送一字符串,然後創建了Subscriber,用來接收事件處理,然後把這兩個綁定,按下按鈕後,subscriber會調用onNext方法和onCompleted方法。
當然這裡的createObservable可以通過just方法簡化:
private void createObservableByJust() {
Log.d(TAG, "createObservable");
observable = Observable.just(getHello());
bindSubscriber();
}
效果和上述的是一樣一樣的。接著簡化subscriber了:
private void createSubscriberByAction() {
onNextAction = new Action1() {
@Override
public void call(String s) {
mHello.setText(s);
}
};
}
private void bindSubscriber() {
//observable.subscribe(subscriber);
observable.subscribe(onNextAction);
}
效果還是一樣一樣的。
好了,接著我們來使用下操作符map,修改如下:
private void createObservableByMap() {
Log.d(TAG, "createObservableByMap");
Observable.just(getHello()).map(new Func1() {
@Override
public String call(String s) {
return s + " by eastmoon";
}
}).subscribe(onNextAction);
}
Android學習指南之二十三:Drawable及其相關類的使用
對於任何軟件來說,美觀的界面都是用戶體驗的重要組成部分,它能提高整個軟件的品質
初涉RxAndroid結合Glide實現多圖片加載操作
初涉RxAndroid結合Glide實現多圖片加載操作 什麼是RxJava或者RxAndroid我就不多廢話了,理論知識一大堆人給我們做好了,只要自己肯去看就能理解,我這
總結一下Android中主題(Theme)的正確玩法,androidtheme
總結一下Android中主題(Theme)的正確玩法,androidtheme在AndroidManifest.xml文件中有<application androi
Hybrid app開發歷程分享
Hybrid app開發歷程分享關於這個話題,本文並不准備詳述移動開發相關的一些通用技術,例如:viewport、rem、flexbox、媒體查詢等。這裡主要講述我們的h