android - How to communicate data between two fragments in a navigation drawer -
i have navigation drawer contains different fragments (each item display fragment) , i'd pass data fragment another.(i have 1 activity contain navigation drawer in have list of fragments).
i have tried many solutions (bundle , intent) couldn't solve problem.
can 1 me pleaaase.
this first fragment : package com.tutecentral.navigationdrawer;
import android.app.fragment; import android.content.context; import android.content.intent; import android.content.sharedpreferences; import android.os.bundle; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.adapterview; import android.widget.adapterview.onitemselectedlistener; import android.widget.arrayadapter; import android.widget.button; import android.widget.edittext; import android.widget.spinner; import android.widget.textview; public class setting extends fragment implements onitemselectedlistener, view.onclicklistener{ button button_validate; edittext edittext; spinner spinner; @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { // todo auto-generated method stub view view; view=inflater.inflate(r.layout.setting, container, false); spinner=(spinner) view.findviewbyid(r.id.spinnersetting); arrayadapter adapter=arrayadapter.createfromresource(getactivity(), r.array.listmenu, android.r.layout.simple_spinner_item); spinner.setadapter(adapter); spinner.setonitemselectedlistener(this); edittext=(edittext) view.findviewbyid(r.id.price); button_validate=(button) view.findviewbyid(r.id.buttonvalidateprices); button_validate.setonclicklistener(this); return view; } @override public void onitemselected(adapterview<?> adapter, view view, int position,long arg3) { // todo auto-generated method stub textview mytext=(textview) view; switch (position) { case 0: edittext.settext("0"); break; case 1: edittext.settext("1"); break; case 2: edittext.settext("2"); break; case 3: edittext.settext("3"); break; case 4: edittext.settext("4"); break; case 5: edittext.settext("5"); break; case 6: edittext.settext("6"); break; case 7: edittext.settext("7"); break; case 8: edittext.settext("8"); break; case 9: edittext.settext("9"); break; default: edittext.settag(getresources().getstring(r.string.default_prices)); } } @override public void onnothingselected(adapterview<?> arg0) { // todo auto-generated method stub } @override public void onclick(view view) { // todo auto-generated method stub if(view.getid()==r.id.buttonvalidateprices) { //sharedpreferences preferences=this.getactivity().getsharedpreferences("mydata", context.mode_private); //sharedpreferences.editor editor=preferences.edit(); //editor.remove("price_"+spinner.getselecteditem().tostring()); //editor.putstring("price_"+spinner.getselecteditem().tostring(), edittext.gettext().tostring()); //editor.commit(); bundle bundle=new bundle(); bundle.putstring("price_"+spinner.getselecteditem().tostring(), edittext.gettext().tostring()); menu menu=new menu(); menu.setarguments(bundle); } }
}
this fragmentb should data (see getarguments): package com.tutecentral.navigationdrawer;
/** * simple {@link android.support.v4.app.fragment} subclass. * */ public class menu extends fragment implements onclicklistener, tablistener{
public menu(){ // todo auto-generated constructor stub } public static final string default="20"; public static actionbar actionbar; button order, add, remove; gallery gallery; imageview imageview; textview descriptiontextview; textview textviewprice; textview totalprice; bundle args = new bundle(); int total=0, price=0; @override public view oncreateview(layoutinflater inflater, viewgroup container,bundle savedinstancestate) { // inflate layout fragment view view=inflater.inflate(r.layout.fragment_menu, container, false); actionbar=getactivity().getactionbar(); actionbar.setnavigationmode(actionbar.navigation_mode_tabs); order=(button) view.findviewbyid(r.id.commander); order.setonclicklistener(this); add=(button) view.findviewbyid(r.id.addmenu); add.setonclicklistener(this); remove=(button) view.findviewbyid(r.id.removemenu); remove.setonclicklistener(this); gallery=(gallery)view.findviewbyid(r.id.gallery); imageview=(imageview)view.findviewbyid(r.id.imageview); gallery.setadapter(new imageadapter(getactivity(), 0)); descriptiontextview=(textview)view.findviewbyid(r.id.descriptiontext); textviewprice=(textview) view.findviewbyid(r.id.pricemenu); textviewprice.setonclicklistener(this); totalprice=(textview) view.findviewbyid(r.id.totalfieldmenu); price=integer.parseint(textviewprice.gettext().tostring()); gallery.setonitemclicklistener(new onitemclicklistener() { @override public void onitemclick(adapterview<?> adapter, view arg1, int position,long arg3) { // todo auto-generated method stub string price1; sharedpreferences preferences=getactivity().getsharedpreferences("mydata", context.mode_private); switch (actionbar.getselectednavigationindex()) { case 0: imageview.setimageresource(imageadapter.thumbsids[position]); break; case 1: imageview.setimageresource(imageadapter.thumbsids2[position]); break; case 2: imageview.setimageresource(imageadapter.thumbsids3[position]); break; default: imageview.setimageresource(imageadapter.thumbsids[position]); break; } changedata(position); switch (imageadapter.thumbsids[position]) { case r.drawable.pizza: //price1=preferences.getstring("price_"+"pizza", default); log.i("bundlebundlebundle", getarguments().getstring("price_"+"pizza",default)); price1=getarguments().getstring("price_"+"pizza", default); break; case r.drawable.fishsoup: price1=preferences.getstring("price_"+"fish soup", default); break; case r.drawable.frenchfries: price1=preferences.getstring("price_"+"french fries", default); break; case r.drawable.chakhchoukha: price1=preferences.getstring("price_"+"chakhchoukha", default); break; case r.drawable.couscous: price1=preferences.getstring("price_"+"couscous", default); break; case r.drawable.zlabia: price1=preferences.getstring("price_"+"zlabia", default); break; case r.drawable.juice: price1=preferences.getstring("price_"+"juice", default); break; case r.drawable.salade_fruit: price1=preferences.getstring("price_"+"salade fruit", default); break; case r.drawable.salade_fromage: price1=preferences.getstring("price_"+"salade fromage", default); break; case r.drawable.salade_verte: price1=preferences.getstring("price_"+"salade verte", default); break; default: price1=preferences.getstring("price_"+"pizza", default); break; } if(price1.equals(string.valueof(default))){ textviewprice.settext(string.valueof(default)); } else{ textviewprice.settext(price1); } price=integer.parseint(price1); } }); actionbar.tab tab1=actionbar.newtab(); tab1.settext(getresources().getstring(r.string.starter)); tab1.settablistener(this); actionbar.tab tab2=actionbar.newtab(); tab2.settext(getresources().getstring(r.string.maindisk)); tab2.settablistener(this); actionbar.tab tab3=actionbar.newtab(); tab3.settext(getresources().getstring(r.string.desert)); tab3.settablistener(this); actionbar.addtab(tab1); actionbar.addtab(tab2); actionbar.addtab(tab3); return view; } public actionbar getactionbar() { return actionbar; } public void setactionbar(actionbar actionbar) { this.actionbar = actionbar; } //this methode allow change data according index of listview. public void changedata(int index){ string [] description=getresources().getstringarray(r.array.description); descriptiontextview.settext(description[index]); } /*public void ordermenu(view view){ }*/ @override public void onclick(view v) { switch (v.getid()) { case r.id.commander: //args.putstring("price", textviewprice.gettext().tostring()); //fragmentmanager manager=getfragmentmanager(); //mydialog dialog=new mydialog(); //dialog.setarguments(args); //dialog.show(manager, "mydialog"); bundle args=new bundle(); args.putstring("pricetotal", totalprice.gettext().tostring()); //haredpreferences preferences=this.getactivity().getsharedpreferences("order_price", context.mode_private); //haredpreferences.editor editor=preferences.edit(); //ditor.putstring("price1"+textviewprice.tostring(), string.valueof(r.string.default_prices)); //ditor.commit(); //imageview.setimageresource(imageadapter.thumbsids[0]); //changedata(0); break; case r.id.removemenu : break; case r.id.addmenu : total=integer.parseint(totalprice.gettext().tostring())+price; totalprice.settext(string.valueof(total)); toast.maketext(getactivity(), "dish added", toast.length_short).show(); break; } } @override public void onviewcreated(view view, bundle savedinstancestate) { // todo auto-generated method stub super.onviewcreated(view, savedinstancestate); log.i("bundlebundlebundle", getarguments().getstring("price_"+"pizza",default)); } @override public void ontabreselected(tab tab, fragmenttransaction ft) { // todo auto-generated method stub } @override public void ontabselected(tab tab, fragmenttransaction ft) { // todo auto-generated method stub gallery.setadapter(new imageadapter(getactivity(), tab.getposition())); switch (tab.getposition()) { case 0: imageview.setimageresource(imageadapter.thumbsids[0]); break; case 1: imageview.setimageresource(imageadapter.thumbsids2[0]); break; case 2: imageview.setimageresource(imageadapter.thumbsids3[0]); break; default: imageview.setimageresource(imageadapter.thumbsids[0]); break; } } @override public void ontabunselected(tab tab, fragmenttransaction ft) { // todo auto-generated method stub }
}
and main activity use adapter handle navigation drawer (see switch(switch (possition) {: package com.tutecentral.navigationdrawer;
import java.util.arraylist; import java.util.list; import com.tutecentral.navigationdrawer.r.menu; import android.os.bundle; import android.annotation.suppresslint; import android.app.actionbar; import android.app.activity; import android.app.fragment; import android.app.fragmentmanager; import android.content.res.configuration; import android.support.v4.app.actionbardrawertoggle; import android.support.v4.view.gravitycompat; import android.support.v4.widget.drawerlayout; import android.view.menu; import android.view.menuitem; import android.view.view; import android.widget.adapterview; import android.widget.listview; public class mainactivity extends activity { private drawerlayout mdrawerlayout; private listview mdrawerlist; private actionbardrawertoggle mdrawertoggle; private charsequence mdrawertitle; private charsequence mtitle; customdraweradapter adapter; list<draweritem> datalist; @suppresslint("resourceascolor") @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); // initializing datalist = new arraylist<draweritem>(); mtitle = mdrawertitle = gettitle(); mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); mdrawerlist = (listview) findviewbyid(r.id.left_drawer); mdrawerlayout.setdrawershadow(r.drawable.drawer_shadow, gravitycompat.start); // add drawer item datalist datalist.add(new draweritem(true)); // adding spinner list datalist.add(new draweritem("main options"));// adding header list datalist.add(new draweritem("search", r.drawable.ic_action_search)); datalist.add(new draweritem("menu", r.drawable.menu)); datalist.add(new draweritem("envoie facture", r.drawable.bill)); datalist.add(new draweritem("affectations", r.drawable.table)); datalist.add(new draweritem("other options")); // adding header list datalist.add(new draweritem("about", r.drawable.ic_action_about)); datalist.add(new draweritem("settings", r.drawable.setting)); datalist.add(new draweritem("help", r.drawable.ic_action_help)); datalist.add(new draweritem("social")); // adding header list datalist.add(new draweritem("message", r.drawable.ic_action_email)); datalist.add(new draweritem("likes", r.drawable.ic_action_good)); datalist.add(new draweritem("twitter", r.drawable.twitter)); adapter = new customdraweradapter(this, r.layout.custom_drawer_item,datalist); mdrawerlist.setadapter(adapter); mdrawerlist.setbackgroundcolor(r.color.background_navada); mdrawerlist.setonitemclicklistener(new draweritemclicklistener()); 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); if (savedinstancestate == null) { if (datalist.get(0).isspinner() & datalist.get(1).gettitle() != null) { selectitem(2); } else if (datalist.get(0).gettitle() != null) { selectitem(1); } else { selectitem(0); } } } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.main, menu); return true; } public void selectitem(int possition) { fragment fragment = null; bundle args = new bundle(); switch (possition) { case 2: fragment = new fragmentthree(); args.putstring(fragmentthree.item_name, datalist.get(possition).getitemname()); args.putint(fragmentthree.image_resource_id, datalist.get(possition).getimgresid()); break; case 3: fragment = new com.tutecentral.navigationdrawer.menu(); break; case 4: fragment = new bill_send(); //args.putstring(fragmenttwo.item_name, datalist.get(possition).getitemname()); //args.putint(fragmenttwo.image_resource_id, datalist.get(possition).getimgresid()); break; case 5: fragment = new tables(); //args.putstring(fragmentthree.item_name, datalist.get(possition).getitemname()); //args.putint(fragmentthree.image_resource_id, datalist.get(possition).getimgresid()); break; case 7: fragment = new about(); //args.putstring(fragmenttwo.item_name, datalist.get(possition).getitemname()); //args.putint(fragmenttwo.image_resource_id, datalist.get(possition).getimgresid()); break; case 8: fragment = new setting(); //args.putstring(fragmentthree.item_name, datalist.get(possition).getitemname()); //args.putint(fragmentthree.image_resource_id, datalist.get(possition).getimgresid()); break; case 9: fragment = new fragmentone(); args.putstring(fragmentone.item_name, datalist.get(possition).getitemname()); args.putint(fragmentone.image_resource_id, datalist.get(possition).getimgresid()); break; case 10: fragment = new fragmenttwo(); args.putstring(fragmenttwo.item_name, datalist.get(possition).getitemname()); args.putint(fragmenttwo.image_resource_id, datalist.get(possition).getimgresid()); break; case 11: fragment = new fragmentthree(); args.putstring(fragmentthree.item_name, datalist.get(possition).getitemname()); args.putint(fragmentthree.image_resource_id, datalist.get(possition).getimgresid()); break; case 12: fragment = new fragmentone(); args.putstring(fragmentone.item_name, datalist.get(possition).getitemname()); args.putint(fragmentone.image_resource_id, datalist.get(possition).getimgresid()); break; case 13: fragment = new fragmentthree(); args.putstring(fragmentthree.item_name, datalist.get(possition).getitemname()); args.putint(fragmentthree.image_resource_id, datalist.get(possition).getimgresid()); break; default: break; } if(com.tutecentral.navigationdrawer.menu.actionbar!=null){ if (com.tutecentral.navigationdrawer.menu.actionbar.isshowing()){ com.tutecentral.navigationdrawer.menu.actionbar.removealltabs(); } } fragment.setarguments(args); fragmentmanager frgmanager = getfragmentmanager(); frgmanager.begintransaction().replace(r.id.content_frame, fragment).commit(); mdrawerlist.setitemchecked(possition, true); settitle(datalist.get(possition).getitemname()); mdrawerlayout.closedrawer(mdrawerlist); } @override public void settitle(charsequence title) { mtitle = title; getactionbar().settitle(mtitle); } @override protected void onpostcreate(bundle savedinstancestate) { super.onpostcreate(savedinstancestate); // sync toggle state after onrestoreinstancestate has occurred. mdrawertoggle.syncstate(); } @override public void onconfigurationchanged(configuration newconfig) { super.onconfigurationchanged(newconfig); // pass configuration change drawer toggles mdrawertoggle.onconfigurationchanged(newconfig); } @override public boolean onoptionsitemselected(menuitem item) { // action bar home/up action should open or close drawer. // actionbardrawertoggle take care of this. if (mdrawertoggle.onoptionsitemselected(item)) { return true; } return false; } private class draweritemclicklistener implements listview.onitemclicklistener { @override public void onitemclick(adapterview<?> parent, view view, int position,long id) { if (datalist.get(position).gettitle() == null) { selectitem(position); } }
}
}
thank you.
when click inside navigationdrawer
, can use setarguments()
method declare datas via bundle
follows:
// int id = 1; myfragment newfragment = new myfragment(); bundle args = new bundle(); args.putint("arg_data_id", id); newfragment.setarguments(args); // replace , commit fragmenttransaction
then, inside fragment, use getargument()
method following:
bundle arg = getarguments(); int id_pass = arg.getint("arg_data_id"); // id_pass = 1;
however, maybe can find useful tips topic: communicating other fragments.
update:
well, tried make example code but, it's hum.. hard ;).
you don't receive argument because in
selectitem
method, don't send argumentmenu
fragment (but switch how do, you're on right way). try separatly send argument in otherbundle
when click onbuttonvalidateprices
insetting
not send or anything. created, value stored it, , nothing.. it's not relatedfragmenttransaction
.inside
menu
, try receive this:log.i("bundlebundlebundle", getarguments().getstring("price_"+"pizza",default));
but think better with:
log.i("bundlebundlebundle", getarguments().getstring("price_pizza"));
you should:
first (in mainactivity) = get value of clicked spinner mainactivity
setting
fragment, create bundle , set value fragment inside selectitem
method follows:
switch(...) { case 2: frag = new menu(); // value of spinner selected here! this: string text = ((spinner) findviewbyid(r.id.spinnersetting)). getselecteditem().tostring(); // string named "spinner_position", how can after args.putstring("spinner_position", text); break; ... } frag.setarguments(args); // replace fragment
second (in menu) = receive argument follows:
// receive using name "spinner_position", that's it. nothing else. string text_spinner = getarguments().getstring("spinner_position");
Comments
Post a Comment