2015-10-27 1 views
0

Je veux montrer un toast de bienvenue chaque fois que j'ouvre l'application. Le code ci-dessus fonctionne, mais il montre également le toast de bienvenue à chaque fois que l'écran tourne.Afficher le toast à chaque fois que l'application Android est ouverte

 protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     Toast.makeText(getApplicationContext(), "WELCOME!!!" , Toast.LENGTH_LONG).show(); 

Existe-t-il un moyen d'afficher le toast une seule fois dans chaque ouverture de l'application?

manifeste:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.im.gernan" > 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.CALL_PHONE"/> 
<application 
    android:name="com.example.im.gernan.MyAppCtx" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

+0

un magasin appelé 'booléen welcomeShown' et changer dans' onCreate'? – Arc676

+0

il suffit d'ajouter à votre manifeste cette ligne android: configChanges = "keyboard | keyboardHidden | orientation" – AsfK

+0

mettre un drapeau booléen dans les préférences partagées http://developer.android.com/intl/es/reference/android/content/SharedPreferences.html – Pavan

Répondre

2

Comme mentionné dans un commentaire, ajoutez un drapeau pour indiquer s'il a été montré ou non. Un lieu peut être l'activité elle-même, mais l'activité peut être terminée et réouvrir au moment où l'application est active. Le cycle de vie du contexte de l'application ne connait que onCreate et onDestroy et conserve la session de l'application hole, qui préfèrera que votre toast ne soit disponible qu'une fois que l'application a démarré.

Exemple:

Cela pourrait être une classe de contexte d'application, référencé dans le manifeste que l'application.

public MyAppCtx extends Application { 
    public boolean toasted = false; 
} 

Ensuite, dans toute activité que vous pouvez faire:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ... 

    if (!((MyAppCtx)getApplicationContext()).toasted) { 
     Toast.makeText(getApplicationContext(), "WELCOME!!!" , Toast.LENGTH_LONG).show(); 
     ((MyAppCtx)getApplicationContext()).toasted = true; 
    } 

    ... 
} 

Maintenant, quand cette activité démarre, il vérifie le contexte d'application si vous aviez montré votre accueil ou non. Si ce n'est pas le cas, il affiche et met le commutateur. C'est tout. Amusez-vous

+0

donc je dois ajouter une nouvelle classe nommée MyAppCtx et y ajouter le premier code? Puis-je le faire sans ajouter de nouvelle classe ? – Apollon

+0

Vous pourriez, mais quand vous avez lu. Cela dépend du cycle de vie des différentes parties. Si vous placez ce drapeau dans une activité, il sera réinitialisé lorsque l'activité rentre tout le cycle de vie, ce qui peut se produire lors de l'utilisation d'une application. Mais je n'ai jamais écrit une application, ce qui ne finit pas par avoir mon propre contexte d'application. Parce que cela rend votre vie tellement plus facile. Il y a une réponse en utilisant les préférences, cela fonctionne aussi et maintient l'information sur plusieurs démarrages d'applications. –

+0

Cest it.Working great.Thank – Apollon

1

Vous pouvez avoir un booléen dans votre ApplicationContext ou un singleton un endroit pour stocker si le pain a été montré déjà - si oui, ne montrent pas le pain grillé à nouveau

0

déclarer une variable

static boolean value=false; 
if(value==false) 
{ 
value=true; 
//show welcome toast 
} 
+0

ce code fonctionne pour moi –