王学岗RxJava(十)

来源:互联网 发布:与范冰冰拍照软件 编辑:程序博客网 时间:2024/05/24 01:41

接上一篇文章,假如我们只有3个独立的AppInfo对象并且我们想把他们转化为Observable并填充到ListView的item中,我改下MainActivity类,

package com.example.acer.rxjavatest;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.ListView;import rx.Observable;import rx.Observer;import rx.subjects.AsyncSubject;public class MainActivity extends AppCompatActivity {    private Observable<AppInfo> observable;    private AsyncSubject mMp;    private ListView mListView;    private AppInfoAdapter mAppInfoAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        observable=getApps();        inintView();    }    public void click(View v){        observable.subscribe(new Observer<AppInfo>() {            @Override            public void onCompleted() {               //完成后刷新UI                mAppInfoAdapter.notifyDataSetChanged();            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(AppInfo appInfo) {              //添加数据                mAppInfoAdapter.addAppInfo(appInfo);            }        });    }    public void inintView() {        mListView = (ListView) findViewById(R.id.lv_app_name);        mAppInfoAdapter = new AppInfoAdapter(this);        mListView.setAdapter(mAppInfoAdapter);    }    private Observable<AppInfo> getApps() {        AppInfo a1=new AppInfo("张欣1",19);        AppInfo a2=new AppInfo("张欣2",19);        AppInfo a3=new AppInfo("张欣3",19);        return Observable. just(a1,a2,a3);    }}

看下运行效果这里写图片描述

我们在看下repeat()方法:

package com.example.acer.rxjavatest;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.ListView;import rx.Observable;import rx.Observer;import rx.subjects.AsyncSubject;public class MainActivity extends AppCompatActivity {    private Observable<AppInfo> observable;    private AsyncSubject mMp;    private ListView mListView;    private AppInfoAdapter mAppInfoAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        observable=getApps();        inintView();    }    public void click(View v){        observable.subscribe(new Observer<AppInfo>() {            @Override            public void onCompleted() {               //完成后刷新UI                mAppInfoAdapter.notifyDataSetChanged();            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(AppInfo appInfo) {              //添加数据                mAppInfoAdapter.addAppInfo(appInfo);            }        });    }    public void inintView() {        mListView = (ListView) findViewById(R.id.lv_app_name);        mAppInfoAdapter = new AppInfoAdapter(this);        mListView.setAdapter(mAppInfoAdapter);    }    private Observable<AppInfo> getApps() {        AppInfo a1=new AppInfo("张欣1",19);        AppInfo a2=new AppInfo("张欣2",19);        AppInfo a3=new AppInfo("张欣3",19);          //4是重复的次数        return Observable. just(a1,a2,a3).repeat(4);    }}

这里写图片描述
defer方法一:

package com.example.acer.rxjavatest;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.ListView;import rx.Observable;import rx.Observer;import rx.Subscriber;import rx.functions.Func0;import rx.subjects.AsyncSubject;public class MainActivity extends AppCompatActivity {    private Observable<AppInfo> observable;    private AsyncSubject mMp;    private ListView mListView;    private AppInfoAdapter mAppInfoAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        observable=getApps();        inintView();    }    public void click(View v){        observable.subscribe(new Observer<AppInfo>() {            @Override            public void onCompleted() {               //完成后刷新UI                mAppInfoAdapter.notifyDataSetChanged();            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(AppInfo appInfo) {              //添加数据                mAppInfoAdapter.addAppInfo(appInfo);            }        });    }    public void inintView() {        mListView = (ListView) findViewById(R.id.lv_app_name);        mAppInfoAdapter = new AppInfoAdapter(this);        mListView.setAdapter(mAppInfoAdapter);    }    private Observable<AppInfo> getApps() {         //一旦观察者订阅,那么会立刻回调Func0的call方法,创建Observable(懒加载)        return Observable.defer(new Func0<Observable<AppInfo>>() {            @Override            public Observable<AppInfo> call() {                return Observable.create(new Observable.OnSubscribe<AppInfo>(){                    @Override                    public void call(Subscriber<? super AppInfo> subscriber) {                        subscriber.onNext(new AppInfo("张欣",10));                        //刷新数据                        subscriber.onCompleted();                    }                });            }        });    }}

看下运行效果

这里写图片描述

defer方法二:

package com.example.acer.rxjavatest;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.ListView;import rx.Observable;import rx.Observer;import rx.functions.Func0;import rx.subjects.AsyncSubject;public class MainActivity extends AppCompatActivity {    private Observable<AppInfo> observable;    private AsyncSubject mMp;    private ListView mListView;    private AppInfoAdapter mAppInfoAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        observable = getApps();        inintView();    }    public void click(View v) {        observable.subscribe(new Observer<AppInfo>() {            @Override            public void onCompleted() {                //完成后刷新UI                mAppInfoAdapter.notifyDataSetChanged();            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(AppInfo appInfo) {                //添加数据                mAppInfoAdapter.addAppInfo(appInfo);            }        });    }    public void inintView() {        mListView = (ListView) findViewById(R.id.lv_app_name);        mAppInfoAdapter = new AppInfoAdapter(this);        mListView.setAdapter(mAppInfoAdapter);    }    private Observable<AppInfo> getApps() {        //一旦观察者订阅,那么会立刻回调Func0的call方法,创建Observable(懒加载)        return Observable.defer(new Func0<Observable<AppInfo>>() {            @Override            public Observable<AppInfo> call() {                AppInfo a1 = new AppInfo("张欣1", 19);                AppInfo a2 = new AppInfo("张欣2", 19);                AppInfo a3 = new AppInfo("张欣3", 19);                return Observable.just(a1, a2, a3).repeat(4);            }        });    }}

这里写图片描述

1 0
原创粉丝点击