2017-10-11 1 views
0

Je fais une application Android. Lorsque j'ouvre l'écran de démarrage de l'application montrant, puis il va à la mainactivité. maintenant si l'utilisateur va appuyer sur le bouton de retour et ouvrir l'application à partir du bouton minimiser. il montre à nouveau splash au lieu de la mainactivité. quelqu'un peut-il m'aider à résoudre ce problème? Voici le code de l'activité de démarrage s'il vous plaît vérifier et donner une solution.sur l'écran de démarrage de presse arrière montrant au lieu de la dernière ouverture de l'écran

Splash

new Handler().postDelayed(new Runnable() { 

      @Override 
      public void run() { 

       fcm_id = FirebaseInstanceId.getInstance().getToken(); 
       session = new SessionManager(getApplicationContext()); 

       usermyid=session.userID(); 
       if(usermyid!=null) 
       { 
        System.out.println("usermyid is not null"+usermyid); 
        usermyid=session.userID(); 
        userd=Long.parseLong(usermyid); 
       } 
       else 
       { 
        System.out.println("usermyid is null"+usermyid); 
        android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(), 
          Settings.Secure.ANDROID_ID); 
        System.out.println("Without Exclude alphabets"+android_id); 

        android_id = android_id.replaceAll("[^\\d.]", ""); 
        System.out.println("After Exclude alphabets"+android_id); 
        long x=Long.parseLong(android_id); 
        x*=-1; 

        System.out.println("Final Id" + x); 
        session_id = String.valueOf(x); 
        System.out.println("sessionid in skipactivity" + session_id); 
        session.createLoginSession(session_id); 
        userd=Long.parseLong(session_id); 
       } 


       if (session.checkLogin()) { 


        if(userd < 0) 
        { 
         System.out.println("It is minus"+userd); 

         prefs = getApplicationContext().getSharedPreferences("MyPrefSKIP", Context.MODE_PRIVATE); 
         boolean rb0 = prefs.getBoolean("skipstuff", false); 
         if(rb0 == true){ 
          // Do something 
          System.out.println("SKIP IS TRUE"); 
          Intent i = new Intent(getApplicationContext(), MainActivity.class); 
          userid = session.userID(); 
          username=session.username(); 
          userlastname=session.userlastname(); 
          useradd1=session.useradd1(); 
          useradd2=session.useradd2(); 
          usercity=session.usercity(); 
          userstate=session.userstate(); 
          userzip=session.userpincode(); 
          usercountry=session.usercountry(); 
          userphone=session.userphone(); 
          usermail=session.useremail(); 
          usercounter=session.usercounter(); 


          System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry); 
          i.putExtra("id", userid); 
          i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
          startActivity(i); 
          finish(); 

         } 
         else 
         { 
          System.out.println("SKIP IS FALSE"); 
          // String forskipid= String.valueOf(userd); 
          Intent menuLeft = new Intent(SplashActivity.this, SkipActivity.class); 
          //menuLeft.putExtra("id",session_id); 
          startActivity(menuLeft); 
         } 
        } 
        else 
        { 
         System.out.println("It is plus"+userd); 
         Intent i = new Intent(getApplicationContext(), MainActivity.class); 
         userid = session.userID(); 
         username=session.username(); 
         userlastname=session.userlastname(); 
         useradd1=session.useradd1(); 
         useradd2=session.useradd2(); 
         usercity=session.usercity(); 
         userstate=session.userstate(); 
         userzip=session.userpincode(); 
         usercountry=session.usercountry(); 
         userphone=session.userphone(); 
         usermail=session.useremail(); 
         usercounter=session.usercounter(); 


         System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry); 
         i.putExtra("id", userid); 
         i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
         startActivity(i); 
         finish(); 
        } 


       } else { 


        System.out.println("THIS SHOULD NOT BE SHOW"); 

       } 

       //GetNotification(); 
       AddDeviceToken(); 
       SplashActivity.this.finish(); 
      } 
     }, SPLASH_TIME_OUT); 

    } 

MainActivity

@Override 
    public void onBackPressed() { 


     if(getSupportFragmentManager().getBackStackEntryCount()>1){ 
      getSupportFragmentManager().popBackStack(); 
     }else 
     if(getSupportFragmentManager().getBackStackEntryCount()==0){ 
      this.finish(); 
     } 
    } 


@Override 
    protected void onResume() { 
     super.onResume(); 
     viewtocart(); 
    } 

    @Override 
    protected void onStart() { 
     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestEmail() 
       .build(); 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 
     mGoogleApiClient.connect(); 
     super.onStart(); 
    } 
+0

afficher le code .. – Anonymous

+0

code de quoi? splash ou mainactivity – chris

+0

Écran de démarrage .. – Anonymous

Répondre

0

Habituellement dans la méthode onBackPress l'utilisateur ne doit pas l'ignorer. Il est généralement maintenu par le système android pour terminer les activités. Changez votre méthode onBackPressed() comme ceci et vérifiez si cela vous aide.

@Override 
public void onBackPressed() { 

    if (getSupportFragmentManager().getBackStackEntryCount() > 0 && 
      getSupportFragmentManager().findFragmentById(R.id.your_container)!=null) { 

     Fragment fragment= getSupportFragmentManager().findFragmentById(R.id.your_container); 
     if(fragment.getClass().getSimpleName().equalsIgnoreCase(FragmentTest.class.getSimpleName())){ 
      getSupportFragmentManager().popBackStackImmediate(); 
     } 

    }else { 
     super.onBackPressed(); 
    } 

} 

EDIT:

bouton arrière et ouvrez l'application de minimiser le bouton

Le problème est here.Since que vous avez démarré le démarrage de l'activité d'abord, puis en allant au menu principal vous sont en train de vider le drapeau et de finir les splash. Ainsi, la pile arrière ne contient qu'une seule activité. Lorsque vous appuyez sur le bouton Précédent de l'activité principale, l'application se ferme au lieu de montrer des activités backstackées. Ici, lorsque vous appuyez de nouveau sur la méthode de cycle de vie, les méthodes onPause(), onStop() et onDestroy() sont appelées.

La raison pour laquelle le splash est appelé à nouveau lorsque vous ouvrez à nouveau l'application à partir de récemment est que l'application est redémarrée et que splash est la première activité. D'où il est montré. En appuyant sur le bouton Précédent de l'activité à domicile, vous quittez les applications, mais en appuyant sur le bouton d'accueil, vous minimisez votre application. L'application réduite ouvre l'application d'où vous l'avez laissée puisqu'elle sera en mémoire.

Pour en savoir plus sur l'activité des cycles de vie vérifier ce lien https://developer.android.com/guide/components/activities/activity-lifecycle.html

+0

j'ai essayé votre code mais toujours le même problème – chris

+0

vérifier le edit.The problème n'est pas avec votre code.C'est le cycle de vie habituel d'android.Pressing le retour à la maison quittera l'application puisque vous êtes en train de nettoyer Lorsque l'application se ferme également, il restera minimisé dans la liste des applications récentes jusqu'à ce que vous effacez la liste des applications récentes.Au lieu de cliquer sur le bouton d'accueil sur votre devic et ouvrez l'application L'écran de démarrage ne vient parce que l'application est minimisé. – Anonymous

+0

vous avez raison ... mais la chose dont j'ai besoin est possible ou non? – chris

1

Dans votre SplashActivity, ajouter la finition() lorsque vous êtes sur le point de feu pour intention MainActivity.

Dans votre MainActivity, implémentez onBackPresssed(), onDestroy() et onResume();

Espérons que cela aidera.

+0

s'il vous plaît vérifier le code mis à jour – chris

+0

après MainActivity Code. –

+0

posté monsieur ..s'il vous plaît vérifier – chris