0

J'ai une application qui a une MainActivity.La pile d'activité ne fonctionne pas comme elle le devrait

Lors de son premier lancement, il lance une activité qui affiche un curseur intro et si ce n'est pas le cas, il lance une MainWeatherActivity.

Voici le code de l'MainActivity

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    boolean firstStart = PreferenceManager.getDefaultSharedPreferences(this) 
      .getBoolean(PREF_KEY_FIRST_START, true); 

    Log.i("MainActivity", "firstStart = " + Boolean.toString(firstStart)); 

    if (firstStart) { 
     Intent i = new Intent(this, MainIntroActivity.class); 
     startActivityForResult(i, REQUEST_CODE_INTRO); 
    } 
    startActivity(new Intent(this, MainWeatherActivity.class)); 
    finish(); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQUEST_CODE_INTRO) { 
     if (resultCode == RESULT_OK) { 
      PreferenceManager.getDefaultSharedPreferences(this).edit() 
        .putBoolean(PREF_KEY_FIRST_START, false) 
        .apply(); 
     } else { 
      PreferenceManager.getDefaultSharedPreferences(this).edit() 
        .putBoolean(PREF_KEY_FIRST_START, true) 
        .apply(); 
      //User cancelled the intro so we'll finish this activity too. 
      finish(); 
     } 
    } 
} 

Quand j'ouvre l'application pour la première fois, l'utilisateur est censé voir le MainIntroActivity puis le MainWeatherActivity. Mais à la place, ce code lance directement MainWeatherActivity et quand j'appuie sur le bouton retour, il lance MainIntroActivity.

Où est-ce que je me suis trompé et comment puis-je résoudre ce problème?

MainIntroActivity

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.i("MainIntroActivity","onCreate"); 
    addSlide(new SlideFragmentBuilder() 
        .backgroundColor(R.color.colorPrimary) 
        .buttonsColor(R.color.colorAccent) 
        .neededPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}) 
        .image(agency.tango.materialintroscreen.R.drawable.ic_next) 
        .title("title 3") 
        .description("Description 3") 
        .build(), 
      new MessageButtonBehaviour(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        showMessage("We provide solutions to make you love your work"); 
       } 
      }, "Work with love")); 
} 

MainWeatherActivity

 LocationManager mLocationManager; 
double latitude, longitude; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_weather); 
    Log.i("MainActivity","onCreate"); 
    mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    if (ActivityCompat.checkSelfPermission(MainWeatherActivity.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
     Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     latitude = location.getLatitude(); 
     longitude = location.getLongitude(); 
     Toast.makeText(MainWeatherActivity.this,"Successful. Latitude ="+Double.toString(latitude)+" Longitude = "+Double.toString(longitude),Toast.LENGTH_SHORT).show(); 
     Log.i("MainActivity","Lat = "+latitude+", lon = "+ longitude); 
    }else{ 
     Toast.makeText(MainWeatherActivity.this, "No Permission. Grant Permission to continue", Toast.LENGTH_SHORT).show(); 
    } 

} 

EDIT: Je oublié de mentionner que les deux IntroActivity et MainActivity a une Nohistory = true dans le fichier manifeste ..

Espoir la question est clair ...

+0

essayer d'enlever finition(); – YoLo

+0

déjà essayé. pas de changement.. –

Répondre

0

L'appel au démarrage des activités est asynchrone. Le comportement que vous voyez pourrait être à cause de cela.

Déplacez le deuxième appel au onActivityResult et au else du premier si.

if (firstStart) { 
    Intent i = new Intent(this,  MainIntroActivity.class); 
    startActivityForResult(i, REQUEST_CODE_INTRO); 
} else { 
    startActivity(new Intent(this, MainWeatherActivity.class)); 
} 
finish(); 
0

essayer de remplacer le code suivant:

if (firstStart) { 
     Intent i = new Intent(this, MainIntroActivity.class); 
     startActivityForResult(i, REQUEST_CODE_INTRO); 
    }else{ 
     startActivity(new Intent(this, MainWeatherActivity.class)); 
     finish(); 
    }