android - Subscribe a Navigation Drawer to an Observable -
i want populate navigation drawer subscribing observable
gets data db , when done, notifies subscriber (using rxjava
). i've done similar subscriber
being class extends fragment
, different in navigation drawer not separate fragment, rather, defined in mainactivity.
how subscribe navigation drawer
observable
?
mainactivity.java
private drawerlayout mdrawerlayout; private listview mdrawerlist; @override public void onstart() { mloadandstoredataobservable = observable.create( super.onstart(); new observable.onsubscribe<string>() { // fragment creation code here // populates string[] mystringarray navigation drawer permitssqlitemanager.addlogline(mactivity, logstring); if (!skiprestfulservicecall) { getdatafromrestfulservice(); } } catch (exception e) { else { // data sqlite log.e("loadandstoredata ", "exception: " + e.getmessage()); getdatafromsqlite(); mprogressdialog.dismiss(); } } } mtitle = mdrawertitle = gettitle(); } mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); .subscribeon(schedulers.io()) mdrawerlist = (listview) findviewbyid(r.id.left_drawer); .observeon(androidschedulers.mainthread()) .subscribe(mdrawerlayout); // parameter fragment mdrawerlayout.setdrawershadow(r.drawable.drawer_shadow, gravitycompat.start); mdrawerlist.setadapter(new arrayadapter<string>(this, r.layout.drawer_list_item, mystringarray)); mdrawerlist.setonitemclicklistener(new draweritemclicklistener()); // enable actionbar app icon behave action toggle nav drawer getactionbar().setdisplayhomeasupenabled(true); getactionbar().sethomebuttonenabled(true); mdrawertoggle = new actionbardrawertoggle(this,mdrawerlayout, r.drawable.ic_drawer, r.string.drawer_open,r.string.drawer_close ) { public void ondrawerclosed(view view) { getactionbar().settitle(mtitle); invalidateoptionsmenu(); // creates call onprepareoptionsmenu() } public void ondraweropened(view drawerview) { getactionbar().settitle(mdrawertitle); invalidateoptionsmenu(); // creates call onprepareoptionsmenu() } }; mdrawerlayout.setdrawerlistener(mdrawertoggle); } private void getdatafromrestfulservice() { <get data> // implement rxjava-observable/subscriber mloadandstoredataobservable = observable.create( new observable.onsubscribe<string>() { @override public void call(subscriber<? super string> subscriber) { try { utilities.loadandstoredata(mactivity); subscriber.onnext("utilities.loadandstoredata done"); //subscriber.oncompleted(); log.e("mainactivity.oncreate()", "subscriber.onnext(\"utilities.loadandstoredata done\")"); string logstring = "mainactivity.oncreate() - subscriber.onnext(utilities.loadandstoredata done)"; log.e(tag, logstring); permitssqlitemanager permitssqlitemanager = permitssqlitemanager.getinstance(); permitssqlitemanager.addlogline(mactivity, logstring); mprogressdialog.dismiss(); } catch (exception e) { log.e("loadandstoredata ", "exception: " + e.getmessage()); subscriber.onerror(e); mprogressdialog.dismiss(); } } } ) .subscribeon(schedulers.io()) .observeon(androidschedulers.mainthread()) .subscribe(mdrawerlayout); // compile error // suscriber fragment, no longer }
if mdrawerlayout instance of class implement observer
can cast observer
navigationdrawer mdrawerlayout = ... yourobservable.subscribe((observer)mdrawerlayout);
if not implement observer
interface, can create new observer
manipulate navigation drawer. (you may need declare mdrawerlayout
final)
final navigationdrawer mdrawerlayout = ... yourobservable.subscribe(new observer<string>() { @override public void oncompleted() { // on completed } @override public void onerror(throwable throwable) { // on error } @override public void onnext(string people) { mdrawerlayout.dosomething(); } });
Comments
Post a Comment