如何在 Kotlin 组合意图标志

我想把两个意图标志结合起来,就像我们在 Android 中做的那样:

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

我尝试过这样做,但对我没有用:

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

试着这样做:

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

说明:

应用于标志的操作是按位或。在 Java 中,您可以使用 |运算符来实现这一点。

至于位操作(在 Kotlin 中) ,没有特殊字符 但是只命名了可以以中缀形式调用的函数。

来源

这里是 IntLong的所有按位操作的列表

  • shl(bits)-有符号的 shift left (Java 的 <<)
  • shr(bits)-有符号的移位权(Java 的 >>)
  • ushr(bits)-无符号移位权(Java 的 >>>)
  • 按位和(Java 的 &)
  • 按位或(Java 的 |)
  • 按位 xor (Java 的 ^)
  • 位反转(Java 的 ~)

解决方案:

所以,在你的例子中,你只需要在你的参数之间调用 or,就像这样。

intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK

高级,可重复使用的 Kotlin:

在 Kotlin,or取代了 Java 的按位或 |

intent.flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK

如果计划定期使用组合,请创建一个意图扩展函数

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

然后,您可以在启动意图之前直接调用这个函数

intent.clearStack()

如果您需要在其他情况下添加其他标志的选项,请向扩展函数添加一个可选的参数。

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