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 ;).

  1. you don't receive argument because in selectitem method, don't send argument menu fragment (but switch how do, you're on right way). try separatly send argument in other bundle when click on buttonvalidateprices in setting not send or anything. created, value stored it, , nothing.. it's not related fragmenttransaction.

  2. 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

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -