2014-05-16 29 views
9

Bối cảnh: Tôi đã viết một vùng chứa tùy chỉnh có khả năng chứa ba đoạn. Tùy thuộc vào trạng thái của vùng chứa này chỉ có hai hoặc ba đoạn đó có thể nhìn thấy được. Để thông báo mảnh vỡ mà tầm nhìn của họ đã thay đổi tôi đã cố gắng ra hai lựa chọn:Cách tạm dừng/tiếp tục một đoạn

  1. tôi gọi Fragment.setUserVisibleHint() phương pháp với giá trị tương ứng. Các mảnh vụn được lưu trữ vượt qua phương pháp này và phản ứng một cách thích hợp. Điều này làm việc ra.

  2. Tôi gọi là FragmentTransaction.hide()FragmentTransaction.show() các phương pháp để ẩn và hiển thị các đoạn. Các mảnh được lưu trữ đã vượt qua Fragment.onHiddenChanged() và phản ứng khi cần thiết. Điều này làm việc ra là tốt.

Vấn đề của tôi là tôi không hài lòng với một trong các tùy chọn này. Tôi muốn đặt phân đoạn vô hình thành trạng thái chuẩn bị tạm dừng trạng thái. Lợi thế của tùy chọn này là tôi giữ mã sạch sẽ và đơn giản, vì tôi không cần ghi đè bất kỳ phương thức đặc biệt nào (như setUserVisibleHint() hoặc onHiddenChanged()) và tôi có thể xử lý mọi thứ bên trong onPause()onResume() đã được triển khai.

Câu hỏi: Cách thích hợp để đặt một mảnh vào trạng thái bị tạm dừng là gì và sau đó tiếp tục từ tiểu bang đó?

Cập nhật: Tôi cũng đã thử ra FragmentTransaction.detach(). Đây không phải là một tùy chọn vì nó phá hủy chế độ xem, điều này không được phép trong trường hợp của tôi.

+1

Bạn có tìm thấy giải pháp cho điều này không? Tôi có chính xác cùng một vấn đề. 'FragmentTransaction.hide()' không gọi 'onPause' gây ra một số hiệu ứng lạ trong trường hợp này ... – mixable

+3

@mixable Sau khi một số nghiên cứu sâu hơn hóa ra, không thể đưa nó vào trạng thái tạm dừng mà không cần tách ra (loại bỏ) nó. –

Trả lời

4

Có vẻ như bạn muốn gọi FragmentTransaction#attachFragmentTransaction#detach để đặt đoạn của bạn thông qua các thói quen vòng đời giống như FragmentPagerAdapter (see source here).

Tách các Fragment với detach() sẽ đặt Fragment qua , onStop và cuối cùng onDestroyView phương pháp vòng đời, và sau đó khi bạn tái gắn nó với attach() nó sẽ đi qua onCreateView, onStart và cuối cùng onResume phương pháp vòng đời .

Bạn phải đảm bảo bạn đang sử dụng thẻ cũng như id vùng chứa vì bạn có thể có nhiều đoạn được đính kèm vào một vùng chứa duy nhất và bạn sẽ có thể nhận được tham chiếu Fragment từ FragmentManager. được thực hiện thông qua thẻ của nó.

+7

Tôi muốn có một cái gì đó tương tự nhưng không phá hủy chế độ xem. Nếu không, tất cả các hình động sẽ chậm chạp. Trong thực tế, tôi chỉ muốn tạm dừng/tiếp tục. Nó rất lạ, họ đã không cung cấp tùy chọn này. –

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