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
Gopal Singh Sirvi

6
@GopalSinghSirvi ในไบนารี LSB (บิตที่มีนัยสำคัญน้อยที่สุด) สำหรับค่าที่มนุษย์อ่านได้เป็นค่าที่เหมาะสมที่สุด นั่นหมายความว่า 0 จาก 110 แทนค่า 2 ^ 0 = 1 ค่าที่สอง 1 แทน 2 ^ 1 = 2 และค่าที่สามแทน 2 ^ 2 = 4 ดังนั้นการใช้ OR | ผู้ดำเนินการบน 4 (100) และ 2 (010) คือ 110
Patric

สิ่งนี้ไม่ควรสับสนกับ Window.setFlags / addFlags ซึ่งมีลักษณะการทำงานที่แตกต่างจากเมธอด Intent
TheIT

ฉันขอทราบการใช้ธงเจตนาเหล่านี้ได้หรือไม่ หรือคุณสามารถแท็กฉันไปยังคำถามที่เหมาะสมได้หรือไม่
Anish Kumar

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;
}

เพิ่งพบสิ่งนี้จากซอร์สโค้ดสำหรับการอ้างอิง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.