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

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

[C++][SFML 2.2] Strange Performance Issues - Moving Mouse Lowers CPU Usage -

ios - Possible to get UIButton sizeThatFits to work? -