【问题标题】:How to combine Intent flags in Kotlin如何在 Kotlin 中组合 Intent 标志
【发布时间】:2018-02-10 05:37:55
【问题描述】:

我想像下面在 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)

【问题讨论】:

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


    【解决方案1】:

    说明:

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

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

    Source

    这里是IntLong 的所有按位运算的列表

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

    解决方案:

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

    intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
    

    【讨论】:

    • 只执行或执行其中一个?我可以使用和吗?
    【解决方案2】:

    尝试以下方法:

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

    【讨论】:

      【解决方案3】:

      高级、可重用的 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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-31
        • 1970-01-01
        • 2017-10-22
        • 1970-01-01
        • 2010-11-23
        • 1970-01-01
        相关资源
        最近更新 更多