2017-02-15 1 views
0

J'ai une notification avec deux boutons. Ainsi, lorsqu'un utilisateur clique sur cette notification (pas sur les boutons de la notification, directement sur la notification), il lance l'écran principal.Gestion du backpress lorsque l'activité a démarré à partir de la notification

Dans mon écran principal, je montre un dialogue qui donne les mêmes options que celles indiquées dans la notification.

Lorsque l'utilisateur interagit avec le dialogue, puis, plus tard, cliquez sur un bouton dans l'écran principal, il commence une nouvelle activité.

Et lorsque l'utilisateur appuie sur le bouton de retour de la nouvelle activité qui a été démarrée. Il revient à l'écran principal.

Maintenant, le problème que je suis confronté est, quand il revient à l'activité principale (activité 1) il showes à nouveau que le dialogue, car il utilise la même intention qui a commencé l'écran principal de la notification

Je ne veux pas que ce dialogue apparaisse de nouveau car l'utilisateur a déjà interagi avec ce dialogue. Comment puis-je gérer cela?

Voici à quoi ressemble mon onStart.

@Override 
protected void onStart() { 
    super.onStart(); 
    String action = getIntent.getAction(); 
    Log.d("MainScreen", "onStart: action " + action); 
    if(action.equals(NOTIFICATION_CLICK)){ 
     showDialogue(); 
    } 
} 
+1

Enregistrer les valeurs dans sharedPreference –

+0

Existe-t-il un autre moyen d'utiliser le framework? –

+0

pas du tout si vous voulez l'enregistrer dans le cache local utilisé variable statique (vrai, faux) mais c'est une mauvaise pratique. Vous devez utiliser sharedPreference –

Répondre

0

Quelle méthode dans l'écran principal ne vous montre la boîte de dialogue (onCreate, onStart ou onResume)?

Je suppose que vous avez montré le dialogue dans onResume. Parce que lorsque l'utilisateur va à l'autre activité, onStop est appelé. sinon, en cliquant sur le bouton précédent par utilisateur, onstart et onResume est invoqué.

Mon suggère: solution 1:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    if (savedInstanceState == null && isFromNotification()) { 
     showDialog() 
    } 
} 

solution 2:

private boolean isShow; 
    protected void onStart() { 
    super.onStart(); 
    if (isShow || !isFromNotification()) return; 
    Toast.makeText(this, "I love you", Toast.LENGTH_LONG).show(); 
    isShow = true; 
} 

Mais je préfère la solution 1, il est plus sûr parce que dans le cas android n'ont pas assez de mémoire Les activies cachés qui peut être retiré.