如何在Kotlin中组合Intent标志

时间:2017-09-01 07:41:40

标签: java android android-intent kotlin bitwise-operators

我想结合两个意图标志,就像我们在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)

3 个答案:

答案 0 :(得分:56)

<强>解释

应用于标志的操作是按位或。在Java中,您有|运算符。

  

在按位操作[在Kotlin]中,没有特殊字符   对于他们来说,只是命名的函数,可以用中缀形式调用。

Source

此处列出了IntLong

的所有按位操作
  • shl(bits) - 签名左移(Java <<
  • shr(bits) - 签名右移(Java >>
  • ushr(bits) - 无符号右移(Java >>>
  • and(bits) - 按位和(Java的&
  • or(bits) - 按位或(Java的|
  • xor(bits) - 按位xor(Java的^
  • inv() - 按位反转(Java的~

<强>解决方案:

因此,在您的情况下,您只需要在您的参数之间调用or,就像这样。

intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK

答案 1 :(得分:5)

尝试以下内容:

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

答案 2 :(得分:1)

高级可重复使用的Kotlin:

在Kotlin中,or替代了Java的逐位或|

intent.flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK

如果您打算定期使用组合,请创建一个Intent扩展功能

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
}
相关问题