Android: в чем разница между setFlags и addFlags для намерения


101

В чем разница между setFlags и addFlags для намерения. Может ли кто-нибудь объяснить это, пожалуйста. Помощь оценена.


Я всегда ценю ссылку на официальную документацию: developer.android.com/reference/android/view/… и / или developer.android.com/reference/android/view/…
MarkHu

Ответы:


133

Когда вы используете, setFlagsвы заменяете старые флаги ... когда вы используете, addFlagsвы добавляете новые флаги. Помните, что флаг - это просто целое число, которое является степенью двойки ... в двоичном формате флаги выглядят так: 1, 10, 100, 1000 и т. Д. (В данном случае это 1, 2, 4, 8) . Итак, что addFlagsдобавляет целое число, которое вы передаете с помощью |оператора.

// example... 
// value of flags: 1
intent.setFlags(2|4); 
// now flags have this value: 110
intent.addFlags(8); 
// now flags have this value: 1110

Как это возможно intent.setFlags(2|4);даст ценность 110?
Гопал Сингх Сирви

6
@GopalSinghSirvi в двоичном формате младший бит (младший значащий бит) для удобочитаемых значений является наиболее правильным. это означает, что 0 из 110 представляет значение 2 ^ 0 = 1. Второе значение 1 представляет 2 ^ 1 = 2. А третье значение представляет 2 ^ 2 = 4. Таким образом, используя OR | Оператор на 4 (100) и 2 (010) - 110
Патрик

Это не следует путать с Window.setFlags / addFlags, поведение которых отличается от поведения методов Intent.
TheIT

Могу ли я узнать об использовании этих флагов намерений? или вы можете указать мне соответствующий вопрос?
Аниш Кумар

11
intent.setFlags(int num);

Этот установленный флаг контролирует, как обрабатывать Intent.setflag в основном зависит от типа компонента, выполняемого намерением. Он возвращает один и тот же объект намерения для объединения нескольких вызовов в один оператор.

intent.addFlags(int num);

Это помогает добавить дополнительные флаги к конкретному намерению с существующими значениями. Это также возвращает тот же объект намерения для объединения нескольких вызовов в один оператор.


6
 public Intent addFlags(int flags) {
    mFlags |= flags;
    return this;
}
public Intent setFlags(int flags) {
    mFlags = flags;
    return this;
}

Только что нашел это в исходном коде для справки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.