2016-08-06 10 views
1

Ein Begrüßungsbildschirm sollte nur einmal erscheinen, wenn die App installiert ist.Splash-Screen, der mehr als einmal angezeigt wird

AndroidManifest

<activity android:name=".Splash" 
     android:noHistory="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Splash.java

public class Splash extends AppCompatActivity { 

private static boolean splashLoaded = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (!splashLoaded) { 
     setContentView(R.layout.splash); 
     int secondsDelayed = 5; 
     new Handler().postDelayed(new Runnable() { 
      public void run() { 
       startActivity(new Intent(Splash.this, MainActivity.class)); 
       finish(); 
      } 
     }, secondsDelayed * 500); 

     splashLoaded = true; 
    } 
    else { 
     Intent goToMainActivity = new Intent(Splash.this, MainActivity.class); 
     goToMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
     startActivity(goToMainActivity); 
     finish(); 
    } 
} 
} 

Aber Mine funktioniert nicht, auch nachdem ich android:noHistory="true" setzen Gibt es etwas, was ich hinzufügen sollte?

+1

, wenn Sie Ihre Anwendung ausführen können, dann wird jedes Mal Ihre splashLoaded Variable initialisiert das ist, warum jedes Mal, wenn Ihr splash Bildschirm ist Anzeige. Verwenden Sie share Preference, um Daten global zu speichern – Shailesh

+0

Was genau möchten Sie tun, rufen Sie die Splash-Klasse erneut aus verschiedenen Klassen? –

+0

Siehe meine Antwort unten für die Verwendung von gemeinsamen Einstellungen, um den Status der SplashLoaded-Variablen beizubehalten. – usajnf

Antwort

1
public class Splash extends AppCompatActivity { 

    private static boolean splashLoaded = false; 
    SharedPreferences prefs; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     prefs = PreferenceManager.getDefaultSharedPreferences(this); 

     splashLoaded = prefs.getBoolean("Splash_Loaded", false); 

     if (!splashLoaded) { 
      setContentView(R.layout.splash); 
      int secondsDelayed = 5; 
      new Handler().postDelayed(new Runnable() { 
       public void run() { 
        startActivity(new Intent(Splash.this, MainActivity.class)); 
        finish(); 
       } 
      }, secondsDelayed * 500); 

      splashLoaded = true; 
      SharedPreferences.Editor editor = prefs.edit(); 
      editor.putBoolean("Splash_Loaded", true); 
      editor.apply(); 
     } else { 
      Intent goToMainActivity = new Intent(Splash.this, MainActivity.class); 
       goToMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
      startActivity(goToMainActivity); 
      finish(); 
     } 
    } 
} 
0

Sie können die Application-Klasse erweitern, um die Variable über verschiedene Aktivitäten hinaus zu speichern. Die Anwendung wird nur gestartet, wenn die Anwendung gestartet wird. Die Aktivität wird jedes Mal gestartet, wenn Sie das bestimmte Fenster öffnen. Sehen Sie diesen Link für weitere Informationen über die Erweiterung der Anwendungsklasse: https://www.google.be/url?sa=t&source=web&rct=j&url=http://www.devahead.com/blog/2011/06/extending-the-android-application-class-and-dealing-with-singleton/&ved=0ahUKEwi3qIaD-KzOAhVCWxoKHURMDgcQFggdMAE&usg=AFQjCNF0ZhP1KDNAUnJNY0YyvZvrm_Vn8g

0

Mit diesem Code -

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    SharedPreferences sharedPreferences = getSharedPreferences("AnyName",MODE_PRIVATE); 
    Boolean loaded = sharedPreferences.getBoolean("loaded",false); 

    if (!loaded) { 
     setContentView(R.layout.splash); 
     SharedPreferences.Editor editor2 = sharedPreferences.edit(); 
     editor2.putBoolean("loaded", true); 
     editor2.commit(); 
     int secondsDelayed = 5; 
     new Handler().postDelayed(new Runnable() { 
      public void run() { 
       startActivity(new Intent(Splash.this, MainActivity.class)); 
       finish(); 
      } 
     }, secondsDelayed * 500); 

     } 
    else { 
     Intent goToMainActivity = new Intent(Splash.this, MainActivity.class); 
     goToMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
     startActivity(goToMainActivity); 
     finish(); 
    } 
}