I want to fill out the navigation box by subscribing to Observable , which receives data from db and, when done, notifies the subscriber (using RxJava ). I did something similar with Subscriber , which is a class that extends Fragment , but it differs in that the navigation box is not a separate fragment, but rather defined in MainActivity.
How can I sign up for Navigation Drawer at 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 was here // populates a String[] myStringArray for Navigation Drawer permitsSQLiteManager.addLogLine(mActivity, logString); if (!skipRestfulServiceCall) { getDataFromRestfulService(); } } catch (Exception e) { else { // get data from 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 was a 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 to behave as action to 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 to onPrepareOptionsMenu() } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); // creates call to 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 was a Fragment, but no longer }
android rx-java observable navigation-drawer
Al lelopath
source share