2013-03-06 33 views
6

Tôi có một FragmentActivity với vùng chứa, nơi tôi đặt Fragment với ViewPager. Trong ViewPager Tôi có 3 Fragment s:Các mảnh vỡ trong ViewPager được tạo lại

[MainActivity] 
    [ViewPagerFragment] 
     [Fragment1][Fragment2][Fragment3] 

Khi người dùng nhấp vào một nút trên Fragment1/Fragment2/Fragment3, tôi thay thế ViewPagerFragment với OtherFragment, vì vậy hệ thống phân cấp như sau:

[MainActivity] 
    [OtherFragment] 

Khi Tôi nhấn Quay lại nút, ViewPagerFragment được tạo lại, cũng như được lồng vào nhau Fragment s (Fragment1/Fragment2/Fragment3).

Có cách nào để lưu trạng thái ViewPagerFragment và các đoạn lồng nhau của nó không? Vì vậy, các mảnh vỡ sẽ giữ trạng thái của chúng và không được tái tạo?

Tôi đã đặt setRetainInstance(true) cho ViewPagerFragment, nhưng có vẻ như nó không có hiệu lực.

Trả lời

16

Chỉ cần thiết lập này: - nơi các đối số là số lượng mảnh vỡ trong ViewPager

mViewPager.setOffscreenPageLimit (3);

ViewPager khá nhiệt tâm khi tắt mọi thứ hiện không sử dụng và đây chính xác là những gì đang xảy ra ở đây. Hành vi mặc định là dành cho ViewPager để "giữ lại" một trang ở hai bên của trang đang được xem và phá hủy phần còn lại. Do đó trong chế độ xem 3 trang của bạn, trang 3 bị hủy khi chọn trang 1, sau đó khi trang 2 được chọn lại trang 3 được tạo lại. Như bạn đã nhận thấy, trang 2 chỉ có onCreate (..) được gọi một lần vì nó luôn luôn liền kề, hoặc là trang hiện đang được chọn.

Để giải quyết vấn đề này, chỉ cần đặt ViewPager.setOffscreenPageLimit (2). Sau đó, ViewPager sẽ giữ tất cả các mảnh của bạn. Rõ ràng đây không phải là một ý tưởng tốt cho một số lượng lớn các mảnh vỡ, nhưng đối với trường hợp của bạn nó sẽ được sử dụng tốt.

+0

Bạn có thể gặp sự cố khi tài nguyên Hệ thống cạn. Một số quan điểm trong đoạn của bạn, hoặc bản thân mảnh vỡ, sẽ bị phá bỏ để chi tiêu những nguồn tài nguyên đó ở một nơi khác. – sudocoder

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