Как объединить флаги Intent в 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)

2 ответов


пояснение:

операция, применяемая к флагам, является побитовой или. В Java у вас есть | оператор для этого.

по состоянию на побитовые операции [в Котлине] нет специальных символов для них, но только именованные функции, которые можно вызвать в форме infix.

источник

здесь Список всех побитовых операций для Int и Long

  • 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

попробуйте что-то вроде следующего:

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