2017-12-16 4 views
-1

So wollte ich einen einmaligen Intro-Bildschirm für meine Anwendung erstellen, indem ich SharedPreferences in einer Antwort verwendete, die ich in einem anderen Post fand. Zuerst schien der Code zu funktionieren, aber es ist nicht, jetzt. Kann mir jemand sagen, was vor sich geht?Einmaliger Begrüßungsbildschirm funktioniert nicht

WelcomeActivity.java (Launcher-Aktivität):

package org.reliefdev.reliefdevedworking; 

import android.content.Intent; 
import android.content.SharedPreferences; 
import android.preference.PreferenceManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class WelcomeActivity extends AppCompatActivity { 

    SharedPreferences prefs; 
    final String showWelcomeScreenString = "showWelcome"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_welcome); 


     Button getStarted = findViewById(R.id.getStartedBtn); 

     prefs = PreferenceManager.getDefaultSharedPreferences(this); 
     final Boolean welcomeScreenShown = prefs.getBoolean(showWelcomeScreenString, false); 

     getStarted.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if (welcomeScreenShown) { 
        startActivity(new Intent(WelcomeActivity.this, LoginReliefAccountActivity.class)); 
        SharedPreferences.Editor editor = prefs.edit(); 
        editor.putBoolean(showWelcomeScreenString, true); 
        editor.apply(); 

       } else if(!welcomeScreenShown){ 
        startActivity(new Intent(WelcomeActivity.this, LoginReliefAccountActivity.class)); 
       } 
      } 
     }); 
    } 
} 
+1

Haben Sie versucht, die App nach dem Löschen ihrer Daten in den Einstellungen erneut auszuführen? –

+0

Ja, das habe ich getan. – flash76

Antwort

0

OK. Ich habe einen dummen Fehler im Code gemacht. Ich habe den Code SharedPreferences INNERHALB des OnClickListener. Wenn ich das umkehre, also wenn der boolesche Wert für sharedprefs true ist, dann setze einen OnClickListener.

0

Init: final Boolean welcomeScreenShown = prefs.getBoolean (showWelcomeScreenString, true); AS True. Nach dem ersten Lauf machen Sie es falsch: editor.putBoolean (showWelcomeScreenString, false);

public class WelcomeActivity extends AppCompatActivity { 

SharedPreferences prefs; 
final String showWelcomeScreenString = "showWelcome"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_welcome); 


    Button getStarted = findViewById(R.id.getStartedBtn); 

    prefs = PreferenceManager.getDefaultSharedPreferences(WelcomeActivity.this); 
    final Boolean welcomeScreenShown = prefs.getBoolean(showWelcomeScreenString, true); 

    getStarted.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (welcomeScreenShown) { 
       startActivity(new Intent(WelcomeActivity.this, LoginReliefAccountActivity.class)); 
       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putBoolean(showWelcomeScreenString, false); 
       editor.apply(); 

      } else if(!welcomeScreenShown){ 
       startActivity(new Intent(WelcomeActivity.this, LoginReliefAccountActivity.class)); 
      } 
     } 
    }); 
} 

}

+0

Ich hatte es tatsächlich wahr und ändere es dann auf false, nachdem die Taste gedrückt wurde. Es funktionierte nicht, also habe ich versucht, es umzustellen und zu sehen, ob es funktionieren würde. Aber es tat es nicht. – flash76

+0

Ich habe gerade getestet, funktioniert gut –

+0

Haben Sie meinen Code verwendet? – flash76

0

Es funktioniert

public class MainActivity extends AppCompatActivity { 

SharedPreferences prefs; 
boolean welcomeScreenShown ; 
final String showWelcomeScreenString = "showWelcome"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    Button getStarted = (Button) findViewById(R.id.txt); 

    prefs = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 
    welcomeScreenShown = prefs.getBoolean(showWelcomeScreenString, true); 

    getStarted.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(MainActivity.this, "welcomeScreenShown:"+welcomeScreenShown, Toast.LENGTH_SHORT).show(); 
      System.out.println("welcomeScreenShown:"+welcomeScreenShown); 
      if (welcomeScreenShown) { 
       welcomeScreenShown = false; 

       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putBoolean(showWelcomeScreenString, false); 
       editor.apply(); 
       //startActivity(new Intent(MainActivity.this, LoginReliefAccountActivity.class)); 

      } else if(!welcomeScreenShown){ 
       // System.out.println("welcomeScreenShown:"+welcomeScreenShown); 
       // startActivity(new Intent(MainActivity.this, LoginReliefAccountActivity.class)); 
      } 
     } 
    }); 
} 

}

Verwandte Themen