Android: Apa perbedaan antara setFlags dan addFlags untuk maksud


Jawaban:


133

Saat Anda menggunakan, setFlagsAnda mengganti bendera lama ... saat Anda menggunakanaddFlags Anda menambahkan bendera baru. Ingat, sebuah flag hanyalah sebuah integer yang merupakan pangkat dua ... dalam biner, flag terlihat seperti ini: 1, 10, 100, 1000, dll ... (yang dalam hal ini adalah 1, 2, 4, 8) . Jadi, yang addFlagsdilakukan adalah menambahkan bilangan bulat yang Anda berikan menggunakan |operator.

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

Bagaimana mungkin intent.setFlags(2|4);akan memberikan nilai 110
Gopal Singh Sirvi

6
@GopalSinghSirvi dalam biner LSB (bit paling tidak signifikan) untuk nilai yang dapat dibaca manusia adalah yang paling benar. itu berarti bahwa 0 dari 110 mewakili nilai 2 ^ 0 = 1. Nilai kedua 1 mewakili 2 ^ 1 = 2. Dan nilai ketiga mewakili 2 ^ 2 = 4. Jadi menggunakan OR | operator pada 4 (100) dan 2 (010) adalah 110
Patric

Ini jangan disamakan dengan Window.setFlags / addFlags yang memiliki perilaku berbeda dengan metode Intent.
TheIT

Bolehkah saya mengetahui penggunaan tanda maksud ini? atau dapatkah Anda memberi tag saya pada pertanyaan yang sesuai?
Anish Kumar

11
intent.setFlags(int num);

Tanda set ini mengontrol cara menangani Intent.setflag terutama bergantung pada jenis komponen yang dieksekusi oleh Intent. Ini mengembalikan objek maksud yang sama untuk merangkai beberapa panggilan ke dalam satu pernyataan.

intent.addFlags(int num);

Ini membantu untuk menambahkan tanda tambahan ke maksud tertentu dengan nilai yang ada. Ini juga mengembalikan objek maksud yang sama untuk merangkai beberapa panggilan ke dalam satu pernyataan.


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

Baru saja menemukan ini dari kode sumber, untuk referensi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.