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
Post a Comment