android - Handling Instance of Fragment -


i working on e-com module.i have implemented 2 fragments in activity.one(homefragment) loading within activity in container , another(cartfragment) loading onclick of cart icon placed on toolbar. everytime when clicking on cart icon same fragment loading again , again, fine want in same way.but want no matter how many times load same fragment on pressing button should go on home screen.right when pressing key returning loaded fragments.how should solve this. please help.

code in context:

mainactivity

public class mainactivity extends appcompatactivity implements homefragment.onadd,homefragment.ondel,fragmentmanager.onbackstackchangedlistener{      private  int count = 0;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);          setcontentview(r.layout.activity_main);          fragmentmanager fragmentmanager = getsupportfragmentmanager();         fragmenttransaction fragmenttransaction = fragmentmanager.begintransaction();         homefragment blank = new homefragment();         fragmenttransaction.add(r.id.frame, blank);         fragmenttransaction.commit();          toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar);         setsupportactionbar(toolbar);          getsupportactionbar().setdisplayhomeasupenabled(true);         getsupportactionbar().setdisplayshowhomeenabled(true);          getsupportactionbar().setdisplayshowtitleenabled(false);      }      @override     public void onbackpressed() {         if (getfragmentmanager().getbackstackentrycount() > 0 ){             getfragmentmanager().popbackstack();         } else {             super.onbackpressed();         }     }      @override     public boolean oncreateoptionsmenu(menu menu) {         getmenuinflater().inflate(r.menu.menu_main, menu);          //----------------cart icon---------------------//         menuitem item1=menu.finditem(r.id.cart);         item1.seticon(buildcounterdrawable(count, r.mipmap.cart));         //----------------spinner icon------------------//         menuitem item = menu.finditem(r.id.spinner);         spinner spinner = (spinner) menuitemcompat.getactionview(item);         arrayadapter<charsequence> adapter = arrayadapter.createfromresource(this,                 r.array.spinner_list_item_array, android.r.layout.simple_spinner_item);         adapter.setdropdownviewresource(android.r.layout.simple_list_item_activated_1);         spinner.setadapter(adapter);          return true;     }      @override     public boolean onoptionsitemselected(menuitem item) {         int id = item.getitemid();          if (id == r.id.cart) {             cartfragment mydetailfragment = new cartfragment();             bundle bundle = new bundle();             mydetailfragment.setarguments(bundle);             fragmenttransaction fragmenttransaction =                     getsupportfragmentmanager().begintransaction();             fragmenttransaction.replace(r.id.activity_main, mydetailfragment);         fragmenttransaction.addtobackstack(null);               fragmenttransaction.commit();             return true;         }         return super.onoptionsitemselected(item);     }      //---------------------------inflating badge------------------------------//      private drawable buildcounterdrawable(int count, int backgroundimageid) {         layoutinflater inflater = layoutinflater.from(this);         view view = inflater.inflate(r.layout.counter_menuitem_layout, null);         view.setbackgroundresource(backgroundimageid);          if (count == 0) {             view countertextpanel = view.findviewbyid(r.id.countervaluepanel);             countertextpanel.setvisibility(view.gone);         } else {             textview textview = (textview) view.findviewbyid(r.id.count);             textview.settext("" + count);         }          view.measure(                 view.measurespec.makemeasurespec(0, view.measurespec.unspecified),                 view.measurespec.makemeasurespec(0, view.measurespec.unspecified));         view.layout(0, 0, view.getmeasuredwidth(), view.getmeasuredheight());          view.setdrawingcacheenabled(true);         view.setdrawingcachequality(view.drawing_cache_quality_high);         bitmap bitmap = bitmap.createbitmap(view.getdrawingcache());         view.setdrawingcacheenabled(false);          return new bitmapdrawable(getresources(), bitmap);     }     @override     public void onactionperformedadd(int count1) {         count++;         invalidateoptionsmenu();     }      @override     public void onactionperformeddel(int count1) {           if (count>0){               count--;               invalidateoptionsmenu();           }     }      @override     public void onbackstackchanged() {      } } 

homefragment

public class homefragment extends fragment {       public homefragment() {         // required empty public constructor     }      private button add,del;     private  int count = 0;      @override     public view oncreateview(layoutinflater inflater, viewgroup container,                              bundle savedinstancestate) {         // inflate layout fragment         view view= inflater.inflate(r.layout.fragment_home, container, false);          add=(button)view.findviewbyid(r.id.add);         del=(button)view.findviewbyid(r.id.minus);          add.setonclicklistener(new view.onclicklistener() {             @override             public void onclick(view view) {                 ((onadd)getactivity()).onactionperformedadd(count);             }         });          del.setonclicklistener(new view.onclicklistener() {             @override             public void onclick(view view) {                 ((ondel)getactivity()).onactionperformeddel(count);             }         });          return view;     }      public interface onadd{         void onactionperformedadd(int count);     }     public interface ondel{         void onactionperformeddel(int count);     }  } 

cartfragment

public class cartfragment extends fragment {       public cartfragment() {         // required empty public constructor     }       @override     public view oncreateview(layoutinflater inflater, viewgroup container,                              bundle savedinstancestate) {         // inflate layout fragment         view view= inflater.inflate(r.layout.fragment_cart, container, false);          toolbar toolbar = (toolbar) view.findviewbyid(r.id.toolbar);         ((appcompatactivity)getactivity()).setsupportactionbar(toolbar);          ((appcompatactivity)getactivity()).getsupportactionbar().setdisplayhomeasupenabled(true);         ((appcompatactivity)getactivity()).getsupportactionbar().setdisplayshowhomeenabled(true);          ((appcompatactivity)getactivity()).getsupportactionbar().setdisplayshowtitleenabled(false);          return view;     }    } 

try changing onbackpressed() implementation   @override     public void onbackpressed() {         if (getfragmentmanager().getbackstackentrycount() > 1 ){             while(getfragmentmanager().getbackstackentrycount() > 1){                 getfragmentmanager().popbackstack();             }         } else {             super.onbackpressed();         }     } 

Comments