Android: у чому різниця між setFlags та addFlags за наміром


Відповіді:


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 у двійковому LSB (найменш значущий біт) для людських читабельних значень є найбільш правильним. це означає, що 0 зі 110 представляє значення 2 ^ 0 = 1. Друге значення 1 являє собою 2 ^ 1 = 2. А третє значення являє собою 2 ^ 2 = 4. Отже, використовуючи АБО | Оператор 4 (100) та 2 (010) - 110
Патрик

Це не слід плутати з Window.setFlags / addFlags, які мають іншу поведінку до методів Intent.
THEIT

Чи можу я знати про використання цих прапорів? чи можете ви позначити мене відповідним запитанням?
Аніш Кумар

11
intent.setFlags(int num);

Цей прапор набору керує тим, як поводитися з Intent.setflag, в основному, залежить від типу компонента, який виконується Intent.Повертає той самий об'єкт наміру для ланцюжка декількох викликів в одному операторі.

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.