web-dev-qa-db-fra.com

Comment combiner des drapeaux d'intention dans Kotlin

Je veux combiner deux indicateurs 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)
41
FaisalAhmed

Explication:

L'opération qui est appliquée aux indicateurs est un bit ou. Dans Java vous avez l'opérateur | Pour cela.

En ce qui concerne les opérations au niveau du bit [dans Kotlin], il n'y a pas de caractères spéciaux pour elles, mais juste des fonctions nommées qui peuvent être appelées sous forme d'infixe.

Source

Voici une liste de toutes les opérations au niveau du bit pour Int et Long

  • shl(bits) - décalage signé vers la gauche (Java <<)
  • shr(bits) - décalage à droite signé (Java >>)
  • ushr(bits) - décalage vers la droite non signé (Java >>>)
  • and(bits) - au niveau du bit et (Java &)
  • or(bits) - au niveau du bit ou (Java |)
  • xor(bits) - xor au niveau du bit (Java ^)
  • inv() - inversion au niveau du bit (Java ~)

Solution:

Donc, dans votre cas, il vous suffit d'appeler or entre vos arguments comme ceci.

intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
63
Willi Mentzel

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
5
AlexTa