Как объединить флаги Intent в Котлине

Я хочу объединить два флага намерений, как мы делаем ниже в 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 у вас есть | оператор для этого.

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

Источник

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

  • shl(bits) - сдвиг со знаком влево (Java <<)
  • shr(bits) - сдвиг со знаком вправо (Java >>)
  • ushr(bits) - беззнаковое смещение вправо (Java's >>>)
  • 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

Продвинутый, повторно используемый Котлин:

В Котлине 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
}
Другие вопросы по тегам