android - Call non parent activity's method from fragment -
i have 1 login activity in login using google. after login moving main screen. has navigation drawer. list of fragments, want sign out google using 1 of fragment. how can achieve this. below code:
loginactivity.java
@override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_login); // session manager session = new sessionmanager(getapplicationcontext()); initui(); setuplisteners(); } protected void onstart() { super.onstart(); } protected void onstop() { super.onstop(); if (myapplication.mgoogleapiclient.isconnected()) { myapplication.mgoogleapiclient.disconnect(); } } private void initui(){ llgoogle = (linearlayout)findviewbyid(r.id.activity_login_llsignin_google); } private void setuplisteners(){ llgoogle.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { if (session.isconnected()) { getprofileinformation(); } else { } } }); } private void resolvesigninerror() { if (myapplication.mconnectionresult.hasresolution()) { try { mintentinprogress = true; myapplication.mconnectionresult.startresolutionforresult(this, rc_sign_in); } catch (sendintentexception e) { mintentinprogress = false; myapplication.mgoogleapiclient.connect(); } } } private void googlepluslogin() { myapplication.googlepluslogin(); resolvesigninerror(); }
myapplication.java
public class myapplication extends application implements connectioncallbacks, onconnectionfailedlistener, resultcallback<people.loadpeopleresult>{ public static typeface app_medium; public static typeface app_regular; public static typeface app_bold; public static final string tag = myapplication.class.getsimplename(); private static sharedpreferences pref; private static myapplication minstance; private static final int rc_sign_in = 0; // google client communicate google public static googleapiclient mgoogleapiclient; public boolean mintentinprogress; public static boolean signedinuser; public static connectionresult mconnectionresult; @suppresswarnings("unused") public void oncreate() { super.oncreate(); minstance = this; mgoogleapiclient = new googleapiclient.builder(this) .addconnectioncallbacks(this) .addonconnectionfailedlistener(this) .addapi(plus.api, plus.plusoptions.builder().build()) .addscope(plus.scope_plus_login).build(); pref = preferencemanager .getdefaultsharedpreferences(getapplicationcontext()); checkfbkey(); app_regular = typeface.createfromasset(getassets(), "fonts/dax_regular.ttf"); app_medium = typeface.createfromasset(getassets(), "fonts/dax_medium.ttf"); app_bold = typeface.createfromasset(getassets(), "fonts/dax_bold.ttf"); } public static synchronized myapplication getinstance() { return minstance; } /** * set user login * */ // public static void setuserfblogin() { // // todo auto-generated method stub // editor edit_login_detail = pref.edit(); // edit_login_detail.putboolean(generalclass.temp_iuserfacebookblogin, // true); // edit_login_detail.commit(); // } public void checkfbkey() { packageinfo info; try { info = getpackagemanager().getpackageinfo(getpackagename(), packagemanager.get_signatures); (signature signature : info.signatures) { messagedigest md; md = messagedigest.getinstance("sha"); md.update(signature.tobytearray()); string = new string(base64.encode(md.digest(), 0)); // string = new // string(base64.encodebytes(md.digest())); log.e("hash key", something); } } catch (namenotfoundexception e1) { log.e("name not found", e1.tostring()); } catch (nosuchalgorithmexception e) { log.e("no such algorithm", e.tostring()); } catch (exception e) { log.e("exception", e.tostring()); } } public static void googlepluslogin() { if (!mgoogleapiclient.isconnecting()) { signedinuser = true; } } public static void googlepluslogout() { if (mgoogleapiclient.isconnected()) { plus.accountapi.cleardefaultaccount(mgoogleapiclient); mgoogleapiclient.disconnect(); mgoogleapiclient.connect(); // updateprofile(false); } } public static void revokegplusaccess() { if (mgoogleapiclient.isconnected()) { plus.accountapi.cleardefaultaccount(mgoogleapiclient); plus.accountapi.revokeaccessanddisconnect(mgoogleapiclient) .setresultcallback(new resultcallback<status>() { @override public void onresult(status arg0) { log.e("login", "user access revoked!"); mgoogleapiclient.connect(); } }); } } @override public void onlowmemory() { // todo auto-generated method stub super.onlowmemory(); } @override public void onresult(loadpeopleresult arg0) { // todo auto-generated method stub } @override public void onconnectionfailed(connectionresult arg0) { // todo auto-generated method stub if (!arg0.hasresolution()) { return; } if (!mintentinprogress) { // store mconnectionresult myapplication.mconnectionresult = arg0; if (signedinuser) { } } } @override public void onconnected(bundle arg0) { // todo auto-generated method stub log.e("application", "connected"); } @override public void onconnectionsuspended(int arg0) { // todo auto-generated method stub mgoogleapiclient.connect(); } }
now, want use googlepluslogout() method in fragment. how can that.?
you should implement global credential , methods in application
class call activity
or fragment
class.
declare set loginactivity currentactivity in application class , using instanceof
call loginsuccessful method of loginactivity
application @ onconnected()
method. , can call logout method fragment of application
class.
check follow example.
/** * @author aa-sk * */ public class myapplication extends application { private activity mcurrentactivity; @override public void oncreate() { super.oncreate(); } @override public void onconnected(bundle mbundle) { activity mactivity = getmcurrentactivity(); if (mactivity != null) { if (mactivity instanceof loginactivity) { loginactivity mloginactivity = (loginactivity) mactivity; mloginactivity.loginsuccessfull(mbundle); } } } private void googlelogout() { } public void setmcurrentactivity(activity mcurrentactivity) { this.mcurrentactivity = mcurrentactivity; } public activity getmcurrentactivity() { return mcurrentactivity; } /** * @author aa-sk * */ public class loginactivity extends activity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); ((myapplication) getapplication()).setmcurrentactivity(loginactivity.this); } private void loginsuccessfull(bundle mbundle) { // store data bundle , call activity user logged in. } } /** * @author aa-sk * */ public class sampleactivity extends fragmentactivity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); } } /** * @author aa-sk * */ public class logout extends fragment { @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { return super.oncreateview(inflater, container, savedinstancestate); } public logout() { ((myapplication) getactivity().getapplication()).googlelogout(); } } }
Comments
Post a Comment