How to add fragment to activity from another class in Android -
i trying make possible add fragments container (framelayout) of activity calling methods of activity.
so here simplified version of activity class:
public class termsandconditionsactivity extends appcompatactivity { private static termsandconditionsactivity instance; private static boolean loggedin; private termsandconditionslistener termsandconditionslistener; private termsandconditionsfragment termsandconditionsfragment; private readtermsandconditionsfragment readtermsandconditionsfragment; private terms terms; private user user; protected fragmentmanager fragmentmanager; public termsandconditionsactivity() {} public static termsandconditionsactivity getinstance(terms terms, user user, boolean loggedin, termsandconditionslistener termsandconditionslistener) { if (instance == null) { instance = new termsandconditionsactivity(); instance.terms = terms; instance.user = user; instance.loggedin = loggedin; instance.termsandconditionslistener = termsandconditionslistener; } return instance; } public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); super.setcontentview(r.layout.activity_main_activity_no_drawer); fragmentmanager = getsupportfragmentmanager(); preparereadtermsandconditionsfragment(); preparetermsandconditionsfragment(); } private void preparetermsandconditionsfragment() { if (termsandconditionsfragment == null) { if (loggedin) { termsandconditionsfragment = termsandconditionsonlinefragment.newinstance(termsandconditionslistener); } else { termsandconditionsfragment = termsandconditionsanonymousfragment.newinstance(termsandconditionslistener); } } } private void preparereadtermsandconditionsfragment() { if (readtermsandconditionsfragment == null) { readtermsandconditionsfragment = readtermsandconditionsfragment.newinstance(terms, user, termsandconditionslistener); } } public void opentermsandconditions() { initfragment(termsandconditionsfragment); } public void openreadtermsandconditions() { initfragment(readtermsandconditionsfragment); } private void initfragment(termsandconditionsfragment fragment) { if (fragment != null) { fragmenttransaction ft = getfragmenttransaction(); ft.add(getcontainerid(), fragment, fragment.gettagstring()).commit(); } } protected fragmenttransaction getfragmenttransaction() { fragmenttransaction ft = fragmentmanager.begintransaction(); ft.setcustomanimations(r.anim.fade_in, r.anim.fade_out); return ft; } public static void startactivity(context context, int flags) { if (context != null) { intent launchintent = getintent(context, flags); context.startactivity(launchintent); } } public static intent getintent(context context, int flags) { intent launchintent = new intent(context, termsandconditionsactivity.class); launchintent.addflags(flags); return launchintent; } } the activity class works fine creating layout of activity, framelayout holding fragments.
the problem that, if call method "opentermsandconditions()" outside activity class, nothing happens. if call oncreate in activity class, added correctly. able add these outside activity class.
i hope can me out here.
any appreciated.
don't create global instances leads memory wastage,create them in methods scope needed , in case don't need fragment instances globally since use once.
try
public void addyourfragment() { fragment fragment = getsupportfragmentmanager.findfragmentbytag(termsandconditionsfragment.class.getsimplename()); if(fragment == null) { fragment = new termsandconditionsfragment(); } if(fragment not added) { //call initfragment,remove first line in , pass fragment parameter initfragment(fragment fragment) { //do add or replace , make common method fragments added don't use many methods each diff fragments added } }
Comments
Post a Comment