如何在Kotlin中组合Intent标志

Fai*_*med 45 java android bitwise-operators android-intent kotlin

我想结合两个意图标志,就像我们在android中所做的那样

Intent intent = new Intent(this, MapsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的事情,但它对我不起作用

val intent = Intent(context, MapActivity::class.java)
intent.flags = (Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
Run Code Online (Sandbox Code Playgroud)

Wil*_*zel 70

说明:

应用于标志的操作是按位或.在Java中,您有|运营商.

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

资源

这里所有的位操作的列表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
Run Code Online (Sandbox Code Playgroud)


Ale*_*xTa 5

尝试以下内容:

val intent = Intent(this, MapsActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
Run Code Online (Sandbox Code Playgroud)


Gib*_*olt 5

高级、可重用的 Kotlin:

在 Kotlin 中,or它是 Java 按位或 的替代品|

intent.flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK
Run Code Online (Sandbox Code Playgroud)

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

fun Intent.clearStack() {
    flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
Run Code Online (Sandbox Code Playgroud)

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

intent.clearStack()
Run Code Online (Sandbox Code Playgroud)

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

fun Intent.clearStack(additionalFlags: Int = 0) {
    flags = additionalFlags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
Run Code Online (Sandbox Code Playgroud)