Skip to content

Commit a91c1d4

Browse files
committed
Add sample for binding to list adapters in ListFragment
1 parent adb54b4 commit a91c1d4

File tree

3 files changed

+97
-0
lines changed

3 files changed

+97
-0
lines changed

rxjava-contrib/rxjava-android-samples/samples/src/main/AndroidManifest.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@
2020
<activity
2121
android:name=".ListeningFragmentActivity">
2222

23+
<intent-filter>
24+
<category android:name="android.intent.category.LAUNCHER"/>
25+
<category android:name="android.intent.category.DEFAULT"/>
26+
<action android:name="android.intent.action.MAIN"/>
27+
</intent-filter>
28+
</activity>
29+
<activity
30+
android:name=".ListFragmentActivity">
31+
2332
<intent-filter>
2433
<category android:name="android.intent.category.LAUNCHER"/>
2534
<category android:name="android.intent.category.DEFAULT"/>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.netflix.rxjava.android.samples;
2+
3+
import android.app.Activity;
4+
import android.app.ListFragment;
5+
import android.os.Bundle;
6+
import android.widget.ArrayAdapter;
7+
8+
import rx.Observable;
9+
import rx.Subscriber;
10+
11+
import static rx.android.schedulers.AndroidSchedulers.mainThread;
12+
13+
/**
14+
* Problem:
15+
* You have an asynchronous sequence that emits items to be displayed in a list. You want the data
16+
* to survive rotation changes.
17+
* <p/>
18+
* Solution:
19+
* Combine {@link android.app.Fragment#setRetainInstance(boolean)} in a ListFragment with
20+
* {@link rx.android.schedulers.AndroidSchedulers#mainThread()} and an {@link rx.Observable.Operator}
21+
* that binds to the list adapter.
22+
*/
23+
public class ListFragmentActivity extends Activity {
24+
25+
@Override
26+
protected void onCreate(Bundle savedInstanceState) {
27+
super.onCreate(savedInstanceState);
28+
setTitle("Lists");
29+
setContentView(R.layout.list_fragment_activity);
30+
}
31+
32+
@SuppressWarnings("ConstantConditions")
33+
public static class RetainedListFragment extends ListFragment {
34+
35+
private ArrayAdapter<String> adapter;
36+
37+
public RetainedListFragment() {
38+
setRetainInstance(true);
39+
}
40+
41+
@Override
42+
public void onCreate(Bundle savedInstanceState) {
43+
super.onCreate(savedInstanceState);
44+
45+
adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1);
46+
setListAdapter(adapter);
47+
SampleObservables.numberStrings(1, 20, 250)
48+
.observeOn(mainThread())
49+
.lift(new BindAdapter())
50+
.subscribe();
51+
}
52+
53+
private final class BindAdapter implements Observable.Operator<String, String> {
54+
@Override
55+
public Subscriber<? super String> call(Subscriber<? super String> subscriber) {
56+
return new Subscriber<String>() {
57+
@Override
58+
public void onCompleted() {
59+
adapter.notifyDataSetChanged();
60+
}
61+
62+
@Override
63+
public void onError(Throwable throwable) {
64+
65+
}
66+
67+
@Override
68+
public void onNext(String strings) {
69+
adapter.add(strings);
70+
}
71+
};
72+
}
73+
}
74+
}
75+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2+
xmlns:tools="http://schemas.android.com/tools"
3+
android:layout_width="match_parent"
4+
android:layout_height="match_parent"
5+
tools:context="com.netflix.rxjava.android.samples.ListeningFragmentActivity">
6+
7+
<fragment
8+
android:tag="retained_list_fragment"
9+
android:layout_width="match_parent"
10+
android:layout_height="match_parent"
11+
android:name="com.netflix.rxjava.android.samples.ListFragmentActivity$RetainedListFragment" />
12+
13+
</RelativeLayout>

0 commit comments

Comments
 (0)