73 votes

Comment combiner les drapeaux Intent en Kotlin

Je veux combiner deux drapeaux d'intention comme nous le faisons ci-dessous dans Android.

Intent intent = new Intent(this, MapsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);

J'ai essayé de faire quelque chose comme ça, mais ça n'a pas marché pour moi.

val intent = Intent(context, MapActivity::class.java)
intent.flags = (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)

119voto

Willi Mentzel Points 7681

Explication :

L'opération qui est appliquée aux drapeaux est un ou par bit. En Java, vous disposez de l'option | opérateur pour cela.

Comme pour les opérations binaires [en Kotlin], il n'y a pas de caractères spéciaux pour elles. pour elles, mais simplement des fonctions nommées qui peuvent être appelées sous forme infixe.

Source :

Voici une liste de toutes les opérations bit par bit pour Int et Long

  • shl(bits) - décalage signé vers la gauche (le << )
  • shr(bits) - décalage signé vers la droite (le >> )
  • ushr(bits) - décalage non signé vers la droite (le >>> )
  • and(bits) - bit à bit et (la méthode de Java & )
  • or(bits) - ou par bit (la méthode de Java | )
  • xor(bits) - xor au sens du bit (la méthode Java ^ )
  • inv() - l'inversion bit à bit (la méthode Java ~ )

Solution :

Donc, dans votre cas, vous devez seulement appeler or entre vos arguments, comme ça.

intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK

15voto

AlexTa Points 3497

Essayez quelque chose comme ceci :

val intent = Intent(this, MapsActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK

5voto

Gibolt Points 4072

Kotlin avancé et réutilisable :

En Kotlin or est le remplacement de la fonction Java bitwise ou | .

intent.flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK

Si vous prévoyez d'utiliser votre combinaison régulièrement, créez une fonction d'extension Intent.

fun Intent.clearStack() {
    flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}

Vous pouvez alors appeler directement cette fonction avant de lancer l'intention

intent.clearStack()

Si vous avez besoin de la possibilité d'ajouter des drapeaux supplémentaires dans d'autres situations, ajoutez un paramètre facultatif à la fonction d'extension.

fun Intent.clearStack(additionalFlags: Int = 0) {
    flags = additionalFlags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X