i create method in main activity sends arraylist bundle going fragment class, when try expected values in fragment, arraylist declared in fragment null
. can me check in code?
mainactivity.java: sendbundledata() method in mainactivity send arraylist bundles fragment
public class mainactivity extends appcompatactivity { private actionbardrawertoggle toggle; private drawerlayout drawerlayout; private listview lv; private string[] arrvalues; private arrayadapter<string> adapter; dbhelper helper; public arraylist<bible> _biblevalues; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); /** instance of dbhelper */ helper = new dbhelper(mainactivity.this); /** getting arraylist values dbhelper */ try { _biblevalues=helper.querydata(); } catch (sqlexception e) { e.printstacktrace(); } /** initialize drawer layout */ drawerlayout= (drawerlayout) findviewbyid(r.id.drawerlayout_bibledashboard); //getting values of string resources array arrvalues=getapplicationcontext().getresources().getstringarray(r.array.verse_chapter); //setting needed parameters in array adapter adapter= new arrayadapter<>(this,android.r.layout.simple_list_item_1,arrvalues); lv= (listview) findviewbyid(r.id.listview_versetitle); lv.setadapter(adapter); //specify onitemclick listener in listview lv.setonitemclicklistener(new draweritemclicklistener()); if (savedinstancestate == null){ selectitem(0); } /** check if can createdatabase */ try { helper.createdatabase(); }catch (ioexception e) { e.printstacktrace(); throw new error("unable create database"); } /** check open database created */ try { helper.opendatabase(); }catch (sqlexception e) { e.printstacktrace(); throw new error("unable open database"); } log.d("database creation","success"); /** display sample data query in database try { verselist=helper.querydata(); verseadapter= new verseadapter(this,verselist); } catch (sqlexception e) { e.printstacktrace(); } */ /** setting drawertoggle */ toggle= new actionbardrawertoggle(this,drawerlayout,r.string.drawer_opened,r.string.drawer_closed) { @override public void ondraweropened(view drawerview) { super.ondraweropened(drawerview); invalidateoptionsmenu(); } @override public void ondrawerclosed(view drawerview) { super.ondrawerclosed(drawerview); invalidateoptionsmenu(); /** end of coding */ } }; //end of toggle '}' drawerlayout.adddrawerlistener(toggle); /** enabling actionbardrawer toggle */ getsupportactionbar().setdisplayhomeasupenabled(true); getsupportactionbar().sethomebuttonenabled(true); } /** end of oncreate */ @override public void onconfigurationchanged(configuration newconfig) { super.onconfigurationchanged(newconfig); toggle.onconfigurationchanged(newconfig); } @override protected void onpostcreate(@nullable bundle savedinstancestate) { super.onpostcreate(savedinstancestate); toggle.syncstate(); } @override public boolean onoptionsitemselected(menuitem item) { if (toggle.onoptionsitemselected(item)) { } return true; } /** method sending bundle of arraylist fragments*/ public void sendbundledata() { genesisfragment gfragment= new genesisfragment(); bundle args= new bundle(); args.putparcelablearraylist("versevalues",_biblevalues); /** make object class parcelable 1st */ gfragment.setarguments(args); } private class draweritemclicklistener implements listview.onitemclicklistener { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { selectitem(position); } } private void setactionbartitles(int position) { string title; if (position==0) { title="genesis"; }else { title=arrvalues[position]; } getsupportactionbar().settitle(title); } private void selectitem(int position) { fragment fragment; switch (position) { case 0: fragment= new genesisfragment(); sendbundledata(); break; default: fragment=new genesisfragment(); break; } fragmenttransaction ft= getfragmentmanager().begintransaction(); ft.replace(r.id.bible_screenlayout,fragment); ft.addtobackstack(null); ft.commit(); setactionbartitles(position); drawerlayout.closedrawer(lv); }
my fragment class: in oncreate method of fragment try retrieve bundle
public class genesisfragment extends fragment { listview lv; arraylist<bible> verselist; verseadapter verseadapter; @override public void onattach(activity activity) { super.onattach(activity); log.d("on attach","onattache method!"); } /** @override */ public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); log.d("on create","oncreate"); bundle bundle=getarguments(); verselist= new arraylist<>(); verselist=bundle.getparcelablearraylist("versevalues"); //retrieving bundles in mainactivity } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { verseadapter= new verseadapter(getactivity(),verselist); // inflate layout fragment view v= inflater.inflate(r.layout.fragment_genesis, container, false); return v; } @override public void onviewcreated(view view, bundle savedinstancestate) { lv=(listview)getactivity().findviewbyid(r.id.listview_genesis); lv.setadapter(verseadapter); verseadapter.notifydatasetchanged(); } }
it's because setting arguments different fragment instance in sendbundledata()
, replacing separate instance
pass fragment argument method
public void sendbundledata(fragment fragment) { bundle args= new bundle(); args.putparcelablearraylist("versevalues",_biblevalues); /** make object class parcelable 1st */ fragment.setarguments(args); }
and switch case like
switch (position) { case 0: fragment= new genesisfragment(); sendbundledata(fragment); break; default: fragment=new genesisfragment(); break; }
Comments
Post a Comment