2013-05-07 4 views
6

gestartet habe ich die folgende Klasse, SplashActivity.java:eine Aktivität zu machen scheinen nur einmal, wenn die App

public class SplashScreen extends Activity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.splash); 
     Thread timer = new Thread(){ 
      public void run(){ 
       try{ 
        sleep(5000); 
       }catch(InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
       finally{ 
        Intent tutorial = new Intent(SplashScreen.this, TutorialOne.class); 
        startActivity(tutorial); 
       } 

      } 
     }; 
     timer.start(); 
      } 
} 

Ich möchte diese Aktivität nur einmal laden, wenn die App zuerst installiert ist das mobile Gerät zum ersten Mal. Da ich neu bei Android bin, habe ich sehr wenig Ahnung davon. Ich habe an Stellen gelesen, dass die SharedPreferences verwendet werden soll, habe aber die Implementierung nicht verstanden. Und die Sache mit dieser Aktivität ist, dass die Aktivität als eine Launcher bei der ersten Verwendung fungiert, das ist, was mich wirklich verwirrt. Weil ich in der Manifestdatei eine andere Aktivität deklariere, die in meinem Fall die MainPage.java wäre. Wie kann ich diese Logik implementieren? Benenne ich die SplashActivity in der MainPage oder gibt es noch etwas, das getan werden muss ?? Bitte helfen Sie jemandem?

Kann jemand bitte den Code aufschreiben, um diese Logik zu implementieren, wenn möglich?

+0

@Pragnani Ich will es als eine einmalige Sache ... wie wenn die App zum ersten Mal in einem mobilen Gerät installiert wird, nur dann sollte der Begrüßungsbildschirm zeigen. –

Antwort

20

diesen Code auf Ihre onCreate Methode hinzufügen

SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
    if(pref.getBoolean("activity_executed", false)){ 
     Intent intent = new Intent(this, TutorialOne.class); 
     startActivity(intent); 
     finish(); 
    } else { 
     Editor ed = pref.edit(); 
     ed.putBoolean("activity_executed", true); 
     ed.commit(); 
    } 

SharedPreferences Sie die App ausführen jedes Mal halten werden, wenn Sie die Daten von Einstellungen auf Ihrem Android reinigen. Das erste Mal wird der Wert von einem booleschen Wert (activity_executed) abgerufen, der für diese Einstellungen gespeichert wurde (ActivityPREF).

Wenn es keinen Wert findet, wird false zurückgegeben, daher müssen wir die Voreinstellung bearbeiten und den Wert auf "true" setzen. Die nächste Ausführung startet die Aktivität TutorialOne.

finish() löscht die aktuelle Aktivität aus der Stapelhistorie, so dass keine Rückkehr möglich ist, wenn Sie die Schaltfläche zurück von TutorialOne verwenden.

über Manifest, können Sie diese actitiy Set mit

 <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

Jedes Mal, wenn die App ausgeführt wird, wird diese Aktivität starten, aber aufgrund der wahren gefassten auf den "activity_executed" wird eine neue Aktivität mit startActivity starten .

+2

Code-only-Antworten sind normalerweise auf SO verpönt. Bitte versuche zu erklären, was es macht und warum es funktioniert, damit das OP und andere davon lernen können. – codeMagic

+0

Das hat bei mir funktioniert! Thx – ymerdrengene

+0

Ich bin verwirrt mit dem Else-Zweig, warum setzen Sie die Variable auf True, wenn es bereits wahr ist? – zdd

0
SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
    if(pref.getBoolean("activity_executed", false)){ 

} else { 
    Intent intent = new Intent(this, TutorialOne.class); 
    startActivity(intent); 
    finish(); 
    Editor ed = pref.edit(); 
    ed.putBoolean("activity_executed", true); 
    ed.commit(); 
} 

Ich denke, es sollte so sein.