2012-12-04 28 views
10

Trong mục FragmentTransaction trên Android docs, nó được mô tả rằng phương pháp replace() giống như gọi phương thức remove() cho tất cả các đoạn được thêm vào chế độ xem hiện tại và sau đó được gọi là phương pháp add(). Trong trường hợp này, để khôi phục đoạn trước đó, chúng ta có thể sử dụng addBackToStack(), có nghĩa là trạng thái giao dịch vẫn đang được quản lý bởi trình quản lý phân mảnh và sẽ đảo ngược hoạt động của nó khi chúng ta bật ra khỏi ngăn xếp.Sự khác biệt giữa việc sử dụng add() addToBackStack(), add(). Detach() và thay thế(). AddToBackStack() trong một FragmentTransaction?

Mặt khác, khi chúng ta thực hiện các giao dịch sử dụng add(), ngoài việc sử dụng các add().addBackToStack(), chúng ta có thể sử dụng phương pháp detach() và khôi phục các đoạn sử dụng attach(), trong đó có hành vi tương tự mà addBackToStack().

Vậy sự khác biệt đằng sau hậu trường giữa các tình huống này là gì?

Trả lời

11

Tôi đã nghiên cứu nhiều hơn và rõ ràng, sự khác biệt giữa detach()addToBackStack() nằm trong vòng đời của Phân đoạn. Khi chúng tôi thêm Phân đoạn vào ngăn xếp lại, được gọi theo thứ tự các phương pháp onPause(), onStop() và sau onDestroyView(). Trong trạng thái này, đoạn sẽ dọn sạch các tài nguyên liên quan đến quan điểm của nó và "ở lại" ở đó chờ đợi để được gọi lại. Quay trở lại bố cục từ ngăn xếp phía sau được gọi là phương thức onCreateView() chỉ dành cho đoạn để vẽ giao diện người dùng của nó. Trên thực tế, mảnh vỡ không bị phá hủy.

Ở phía bên kia, khi chúng tôi sử dụng detach() để loại bỏ hoặc thay thế các mảnh, được gọi theo thứ tự tất cả các phương pháp tương tự trích dẫn đầu tiên (onPause(), onStop(), onDestroyView()) thêm này hai phương pháp: onDestroy(), để làm sạch thức của nhà nước của mảnh và onDetach(), để tách mảnh không còn liên kết với Hoạt động của nó nữa.

Về cơ bản, đằng sau hậu trường, chúng không có cùng hành vi: sử dụng addToBackStack() các đoạn vẫn được khởi tạo và detach(), không.

Các vấn đề liên quan