phân mảnh android onRestoreInstanceState


120

Tôi có thiếu một cái gì đó hoặc Fragmentkhông có một onRestoreInstanceState()phương pháp? Nếu không, làm cách nào để đạt được điều tương tự?

Câu trả lời:


200

Các mảnh vỡ không có onRestoreInstanceStatephương thức.

Bạn có thể đạt được kết quả tương tự onActivityCreatedkhi nhận được một gói có trạng thái phiên bản đã lưu (hoặc null).

Kiểm tra mã nguồn tại đây .


90
Đó không phải là một thiết kế nhất quán, phải không?
Ehtesh Choudhury

4
Điều này cũng không quan tâm đến việc nối lại các mảnh phải không? Nó tốt cho các thay đổi cấu hình, nhưng điều gì sẽ xảy ra nếu bạn đi đến một hoạt động từ một phân đoạn và sau đó quay lại phân mảnh đó?
speedynomads

1
Các phân đoạn phải thuộc về một hoạt động để bắt đầu, vì vậy nếu bạn lưu trong phân đoạn, nó sẽ lưu vào hoạt động chính. Vì vậy, nếu bạn rời khỏi rằng đoạn (mà thuộc về một hoạt động) và quay trở lại mảnh, tất cả các giá trị này sau đó được khôi phục từ các hoạt động cha mẹ
Shaun

3
onActivityCreate () không phải là phương pháp duy nhất để khôi phục trạng thái của phân mảnh, bạn có thể khôi phục nó trong onCreate (), onCreateView () hoặc onActivityCreate (). developer.android.com/guide/components/fragment.html
shaby

1
@EhteshChoudhury Không có gì trong phát triển ứng dụng Android là "thiết kế nhất quán". Tất cả đều rối tung lên và mọi thứ đều "phản đối".
Karanveer Singh

43

Tôi biết, bạn đã chấp nhận câu trả lời, nhưng bạn nên đọc tài liệu chính thức về các đoạn và có nội dung (đoạn "Xử lý Vòng đời của Mảnh"):

Bạn có thể giữ lại trạng thái của một phân mảnh bằng cách sử dụng Gói, trong trường hợp quá trình của hoạt động bị hủy và bạn cần khôi phục trạng thái phân mảnh khi hoạt động được tạo lại. Bạn có thể lưu trạng thái trong quá trình gọi lại onSaveInstanceState () của phân mảnh và khôi phục nó trong khi onCreate (), onCreateView () hoặc onActivityCreate ()

Vì vậy, bạn có thể sử dụng bộ quần áo mà bạn tốt nhất: onCreate(), onCreateView(), hoặconActivityCreated()


29

Trong ví dụ về ListFragment của hướng dẫn Fragment, bạn có thể tìm thấy:

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

Bạn có thể sử dụng như thế này:

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

onActivityCreated() được gọi sau khi phân mảnh quay trở lại từ ngăn xếp.


13

onViewStateRestoredcủa Fragmentlà tương đương với onRestoreInstanceStatecủa Activity. Nhưng nó được gọi sau onActivityCreated(Bundle)và trước onStart().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.