Android - Changing Fragments within an Activity -
i creating android app uses main activity, , several fragments. main activity min "control" everything, , each fragment displays different screen different information. here of code main activity:
public class mainmenu extends fragmentactivity implements firstmenu.fragmentlistener, checklist.fragmentlistener, tool.fragmentlistener{ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main_menu); firstmenu firstmenu = new firstmenu(); getsupportfragmentmanager().begintransaction().add(r.id.fragment_container, firstmenu).commit(); } public void changescreen() { checklist checklist = new checklist(); android.support.v4.app.fragmenttransaction transaction = getsupportfragmentmanager().begintransaction(); transaction.replace(r.id.fragment_container, checklist); transaction.addtobackstack(null); transaction.commit(); } public void changescreentwo() { chemicalchecklist chemchecklist = new chemicalchecklist(); android.support.v4.app.fragmenttransaction transaction = getsupportfragmentmanager().begintransaction(); transaction.replace(r.id.fragment_container, chemchecklist); transaction.addtobackstack(null); transaction.commit(); }
and here code first fragment displays menu:
public class firstmenu extends fragment { fragmentlistener fragmentchanger; public interface fragmentlistener { public void changescreen(); public void changescreenfour(); public void changescreenfive(); } @override public void onattach(activity activity) { super.onattach(activity); try { fragmentchanger = (fragmentlistener) activity; } catch (classcastexception e) { throw new classcastexception(); } } public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { container.removeallviews(); view view = inflater.inflate(r.layout.menu, container, false); button checklistbutton = (button) view.findviewbyid(r.id.checklistbutton); button toolbutton = (button) view.findviewbyid(r.id.toolbutton); button timefusebutton = (button) view.findviewbyid(r.id.timefusecalculator); button blastfragbutton = (button) view.findviewbyid(r.id.blastfragbutton); button demobutton = (button) view.findviewbyid(r.id.demobutton); checklistbutton.setonclicklistener( new view.onclicklistener() { @override public void onclick(view v) { buttonclicked(v); } } ); toolbutton.setonclicklistener( new view.onclicklistener() { @override public void onclick(view v) { toolbuttonclicked(v); } } ); demobutton.setonclicklistener( new view.onclicklistener() { @override public void onclick(view v) { demobuttonclicked(v); } } ); blastfragbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent intent = new intent(getactivity(), blastfrag.class); startactivity(intent); } }); timefusebutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent intent = new intent(getactivity(), timefuse.class); startactivity(intent); } }); return view; } public void buttonclicked( view v ) { fragmentchanger.changescreen(); } public void toolbuttonclicked( view v ) { fragmentchanger.changescreenfour(); } public void demobuttonclicked( view v ) { fragmentchanger.changescreenfive(); } }
and code second fragment, displayed screen using method changescreen();
public class checklist extends fragment{ fragmentlistener fragmentalternator; public interface fragmentlistener { public void changescreentwo(); } @override public void onattach(activity activity) { super.onattach(activity); try { fragmentalternator = (fragmentlistener) activity; } catch (classcastexception e) { throw new classcastexception(); } } public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { container.removeallviews(); view view = inflater.inflate(r.layout.checklists, container, false); button chembutton = (button) view.findviewbyid(r.id.chembutton); chembutton.setonclicklistener( new view.onclicklistener() { @override public void onclick(view v) { buttonclicked(v); } } ); return view; } public void buttonclicked( view v ) { fragmentalternator.changescreentwo(); } }
i have many more fragments displayed screen using more methods, such as: changescreentwo(), changescreenthree(), changescreenfour(), etc. code methods pretty same. difference is creating different objects different classes. i'm wondering if current way i'm doing okay, or if there way can make these "changescreen" methods 1 method, , pass in each type of class parameter. i've looked on , can't seem find answer i'm looking particular situation.
pass in fragment index , use choose fragment type.
public void changescreen(int position) { switch(position){ case 0: getsupportfragmentmanager().begintransaction() .replace(r.id.fragment_container, new checklist()) .addtobackstack(null) .commit(); break; case 1: getsupportfragmentmanager().begintransaction() .replace(r.id.fragment_container, new chemicalchecklist()) .addtobackstack(null) .commit(); break; } }
Comments
Post a Comment