ส่วน Android onRestoreInstanceState


120

ฉันทำอะไรหายไปหรือFragmentไม่มีonRestoreInstanceState()วิธีการ? ถ้าไม่ฉันจะบรรลุสิ่งที่คล้ายกันได้อย่างไร

คำตอบ:


200

แฟรกเมนต์ไม่มีonRestoreInstanceStateเมธอด

คุณสามารถบรรลุผลลัพธ์เดียวกันonActivityCreatedซึ่งได้รับบันเดิลที่มีสถานะอินสแตนซ์ที่บันทึกไว้ (หรือ null)

ตรวจสอบรหัสที่มาที่นี่


90
นั่นไม่ใช่การออกแบบที่สอดคล้องกันใช่หรือไม่?
Ehtesh Choudhury

4
สิ่งนี้ยังไม่ดูแลการกลับมาใช้งานส่วนย่อยหรือไม่? มันใช้ได้ดีสำหรับการเปลี่ยนแปลงคอนฟิกูเรชัน แต่ถ้าคุณไปที่กิจกรรมจากแฟรกเมนต์แล้วกลับไปที่แฟรกเมนต์ล่ะ?
speedynomads

1
แฟรกเมนต์ควรเป็นของกิจกรรมที่จะเริ่มต้นด้วยดังนั้นหากคุณบันทึกในแฟรกเมนต์มันจะบันทึกลงในกิจกรรมพาเรนต์ ดังนั้นหากคุณออกจากส่วนนั้น (ซึ่งเป็นของกิจกรรม) และกลับไปที่ส่วนนั้นค่าทั้งหมดจะถูกเรียกคืนจากกิจกรรมหลัก
ฌอน

3
onActivityCreated () ไม่ใช่วิธีเดียวในการกู้คืนสถานะของแฟรกเมนต์คุณสามารถกู้คืนได้ในระหว่าง onCreate (), onCreateView () หรือ onActivityCreated () developer.android.com/guide/components/fragments.html
shaby

1
@EhteshChoudhury ไม่มีอะไรในการพัฒนาแอป Android คือ "การออกแบบที่สอดคล้องกัน" มันวุ่นวายไปหมดและทุกอย่าง "เลิกใช้งาน"
Karanveer Singh

43

ฉันรู้ว่าคุณยอมรับคำตอบแล้ว แต่คุณควรอ่านเอกสารอย่างเป็นทางการเกี่ยวกับชิ้นส่วนและระบุว่า (ย่อหน้า "การจัดการวงจรชีวิตของชิ้นส่วน"):

คุณสามารถคงสถานะของแฟรกเมนต์ไว้ได้โดยใช้ Bundle ในกรณีที่กระบวนการของกิจกรรมถูกฆ่าและคุณจำเป็นต้องกู้คืนสถานะแฟรกเมนต์เมื่อสร้างกิจกรรมใหม่ คุณสามารถบันทึกสถานะระหว่างการเรียกกลับ onSaveInstanceState () ของแฟรกเมนต์และเรียกคืนระหว่าง onCreate (), onCreateView () หรือ onActivityCreated ()

ดังนั้นคุณสามารถใช้ชุดที่ดีที่สุดที่คุณ: onCreate(), onCreateView()หรือonActivityCreated()


29

ในตัวอย่าง ListFragment ของคู่มือ Fragments คุณจะพบ:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}

ซึ่งคุณสามารถใช้ได้ดังนี้:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }
}

onActivityCreated() ถูกเรียกใช้หลังจากที่ส่วนย่อยกลับมาจากสแต็ก


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