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