Skip to content

Commit e1f73ef

Browse files
committed
RxAndroid demo
1 parent a812a3f commit e1f73ef

File tree

4 files changed

+162
-7
lines changed

4 files changed

+162
-7
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@
9090
android:name=".activity.ColorBoardActivity"
9191
android:screenOrientation="portrait" />
9292

93+
<activity
94+
android:name=".activity.RxAndroidActivity"
95+
android:screenOrientation="portrait" />
96+
9397
</application>
9498

9599
</manifest>

app/src/main/java/com/rust/aboutview/MainActivity.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.rust.aboutview.activity.AudioPlayerActivity;
1616
import com.rust.aboutview.activity.ColorBoardActivity;
1717
import com.rust.aboutview.activity.FragmentCommunicationActivity;
18+
import com.rust.aboutview.activity.RxAndroidActivity;
1819
import com.rust.aboutview.activity.WriteFileActivity;
1920
import com.rust.arslan.ArslanActivity;
2021
import com.rust.contactview.PeopleMainActivity;
@@ -74,6 +75,7 @@ protected void onResume() {
7475

7576
private void initPageList() {
7677
final ArrayList<PageListAdapter.DeviceItemViewEntity> pageItemViewEntities = new ArrayList<>();
78+
pageItemViewEntities.add(new PageListAdapter.DeviceItemViewEntity(RX_ANDROID_DEMO_ACTIVITY, "RxAndroid demo"));
7779
pageItemViewEntities.add(new PageListAdapter.DeviceItemViewEntity(COLOR_BOARD_ACTIVITY, "颜色选择板"));
7880
pageItemViewEntities.add(new PageListAdapter.DeviceItemViewEntity(IMAGE_PROCESSING, getString(R.string.image_process)));
7981
pageItemViewEntities.add(new PageListAdapter.DeviceItemViewEntity(DEVICE_INFO, getString(R.string.device_info)));
@@ -90,7 +92,6 @@ private void initPageList() {
9092
pageItemViewEntities.add(new PageListAdapter.DeviceItemViewEntity(FRAGMENT_COMMUNITY, "fragment与activity通信"));
9193
pageItemViewEntities.add(new PageListAdapter.DeviceItemViewEntity(WRITE_FILE, "写数据到文件"));
9294
pageItemViewEntities.add(new PageListAdapter.DeviceItemViewEntity(AUDIO_PLAYER, "Audio player"));
93-
pageItemViewEntities.add(new PageListAdapter.DeviceItemViewEntity(RX_ANDROID_DEMO_ACTIVITY, "RxAndroid demo"));
9495

9596
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 1);
9697
gridLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
@@ -184,6 +185,7 @@ public void onItemClick(View view, int position) {
184185
startActivity(i);
185186
break;
186187
case RX_ANDROID_DEMO_ACTIVITY:
188+
startActivity(new Intent(getApplicationContext(), RxAndroidActivity.class));
187189
break;
188190
default:
189191
break;
Lines changed: 115 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,134 @@
11
package com.rust.aboutview.activity;
22

33
import android.app.Activity;
4+
import android.graphics.Color;
45
import android.os.Bundle;
5-
import android.os.Looper;
6+
import android.support.v4.content.ContextCompat;
7+
import android.support.v7.widget.Toolbar;
8+
import android.util.Log;
9+
import android.view.View;
10+
import android.widget.TextView;
11+
import android.widget.Toast;
612

713
import com.rust.aboutview.R;
814

915
import rx.Observable;
16+
import rx.Subscriber;
1017
import rx.android.schedulers.AndroidSchedulers;
11-
import rx.schedulers.Schedulers;
18+
import rx.functions.Action1;
19+
20+
import static com.rust.aboutview.R.id.act_rx_btn2;
1221

1322
public class RxAndroidActivity extends Activity {
1423

24+
private static final String TAG = RxAndroidActivity.class.getSimpleName();
25+
26+
private TextView mTv1;
27+
private TextView mTv2;
28+
private TextView mTv3;
29+
30+
private int mCount = 0;
31+
1532
@Override
1633
protected void onCreate(Bundle savedInstanceState) {
1734
super.onCreate(savedInstanceState);
1835
setContentView(R.layout.act_rx_android);
19-
Observable.just("one", "two", "three", "four", "five")
20-
.subscribeOn(Schedulers.newThread())
21-
.observeOn(AndroidSchedulers.mainThread())
22-
.subscribe(/* an Observer */);
36+
Toolbar toolbar = (Toolbar) findViewById(R.id.act_rx_toolbar);
37+
toolbar.setTitle("RxAndroid demo");
38+
toolbar.setTitleTextColor(Color.WHITE);
39+
toolbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary));
2340

41+
mTv1 = (TextView) findViewById(R.id.act_rx_tv1);
42+
mTv2 = (TextView) findViewById(R.id.act_rx_tv2);
43+
mTv3 = (TextView) findViewById(R.id.act_rx_tv3);
44+
45+
findViewById(R.id.act_rx_btn1).setOnClickListener(new View.OnClickListener() {
46+
@Override
47+
public void onClick(View v) {
48+
mCount++;
49+
Log.d(TAG, "onClick: " + mCount);
50+
/**
51+
* 实例1 将事件源与订阅者关联起来
52+
*/
53+
@SuppressWarnings("unchecked")
54+
Observable<String> observable = Observable.create(mObservableAction)
55+
.subscribeOn(AndroidSchedulers.mainThread());
56+
observable.subscribe(mSubscriber1);
57+
observable.subscribe(mActionTv2);// 这个可以一直执行下去
58+
}
59+
});
60+
61+
findViewById(act_rx_btn2).setOnClickListener(new View.OnClickListener() {
62+
@Override
63+
public void onClick(View v) {
64+
// 事件产生,分发给订阅者
65+
Observable<String> oba1 = Observable.just("事件分发源 " + mCount);
66+
oba1.observeOn(AndroidSchedulers.mainThread());
67+
oba1.subscribe(mActionTv3);
68+
oba1.subscribe(mActionShowToast);
69+
}
70+
});
2471
}
72+
73+
/**
74+
* 接收消息的订阅者
75+
*/
76+
Subscriber<String> mSubscriber1 = new Subscriber<String>() {
77+
@Override
78+
public void onCompleted() {
79+
Log.d(TAG, "onCompleted: got sth");
80+
}
81+
82+
@Override
83+
public void onError(Throwable e) {
84+
Log.d(TAG, "onError");
85+
}
86+
87+
@Override
88+
public void onNext(String str) {
89+
Log.d(TAG, "onNext:" + str);
90+
mTv1.setText(str);
91+
}
92+
};
93+
94+
/**
95+
* 被观察者
96+
*/
97+
Observable.OnSubscribe mObservableAction = new Observable.OnSubscribe<String>() {
98+
@Override
99+
public void call(Subscriber<? super String> subscriber) {
100+
subscriber.onNext("mObservableAction: " + mCount);
101+
/**
102+
* Notifies the Observer that the {@link Observable}
103+
* has finished sending push-based notifications
104+
*/
105+
subscriber.onCompleted();// 执行了此方法后,将不再接收处理消息
106+
}
107+
};
108+
109+
/**
110+
* 作为观察者 - 接收到事件后执行操作
111+
* 不知为何要起 Action1 这个名字
112+
*/
113+
private Action1<String> mActionTv2 = new Action1<String>() {
114+
@Override
115+
public void call(String s) {
116+
mTv2.setText(s);
117+
}
118+
};
119+
120+
private Action1<String> mActionTv3 = new Action1<String>() {
121+
@Override
122+
public void call(String s) {
123+
mTv3.setText(s);
124+
}
125+
};
126+
127+
private Action1<String> mActionShowToast = new Action1<String>() {
128+
@Override
129+
public void call(String s) {
130+
Toast.makeText(RxAndroidActivity.this, s, Toast.LENGTH_SHORT).show();
131+
}
132+
};
133+
25134
}

app/src/main/res/layout/act_rx_android.xml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,44 @@
33
android:layout_width="match_parent"
44
android:layout_height="match_parent">
55

6+
<android.support.v7.widget.Toolbar
7+
android:id="@+id/act_rx_toolbar"
8+
android:layout_width="match_parent"
9+
android:layout_height="?android:attr/actionBarSize" />
10+
11+
<LinearLayout
12+
android:layout_width="match_parent"
13+
android:layout_height="match_parent"
14+
android:layout_below="@id/act_rx_toolbar"
15+
android:orientation="vertical">
16+
17+
<TextView
18+
android:id="@+id/act_rx_tv1"
19+
android:layout_width="match_parent"
20+
android:layout_height="40dp" />
21+
22+
<Button
23+
android:id="@+id/act_rx_btn1"
24+
android:layout_width="match_parent"
25+
android:layout_height="wrap_content"
26+
android:text="btn1" />
27+
28+
<TextView
29+
android:id="@+id/act_rx_tv2"
30+
android:layout_width="match_parent"
31+
android:layout_height="40dp" />
32+
33+
<TextView
34+
android:id="@+id/act_rx_tv3"
35+
android:layout_width="match_parent"
36+
android:layout_height="40dp" />
37+
38+
<Button
39+
android:id="@+id/act_rx_btn2"
40+
android:layout_width="match_parent"
41+
android:layout_height="wrap_content"
42+
android:text="btn2" />
43+
</LinearLayout>
44+
45+
646
</RelativeLayout>

0 commit comments

Comments
 (0)