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

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -