2012-07-02 35 views
23

Tôi muốn lưu vào bộ nhớ cache một chế độ xem đoạn. Hoạt động của tôi có các tab có thể vuốt và mỗi tab gọi một đoạn khác. Nhưng khi tôi vuốt giữa các tab, quá trình chuyển đổi có vẻ khá chậm vì sự phá hủy của chế độ xem đoạn, được xây dựng lại trong khi thao tác vuốt. Có ai biết làm thế nào tôi có thể cache xem của từng mảnh để ngăn chặn vấn đề này? Tôi làm việc với hỗ trợ thư viện v4 và api 14Cách lưu vào bộ nhớ cache xem một đoạn

Tôi đã cố gắng triển khai một hàm tạo cho các phân đoạn, được gọi bởi vùng chứa hoạt động của các đoạn: tôi gọi hàm khởi tạo, các phân đoạn được tạo thành biến của lớp hoạt động và sau đó , bất cứ khi nào một mảnh phải tự hiển thị, lớp hoạt động trả về đối tượng phân đoạn mà tôi đã tạo trước đây, nhưng điều này không cải thiện được ứng dụng của tôi nhiều vì chế độ xem của phân đoạn bị phá hủy anyway

+0

bạn đã thử lưu vào bộ nhớ cache chế độ xem theo từng phần và trên onCreateView, bạn có trả về đoạn được lưu trong bộ nhớ cache không? Hoặc quan điểm luôn luôn bị phá hủy? – ffleandro

+0

Bạn có sử dụng 'ViewPager' cho" tab có thể vuốt "của bạn không? – Evos

+0

Tôi sử dụng các tab có thể vuốt – Release

Trả lời

23

Điều này là do nội bộ theo mặc định máy nhắn tin tải tối đa 3 trang (phân đoạn) tại thời điểm: hiển thị, trước đó và tiếp theo, nếu bạn có 5 đoạn, điều này sẽ xảy ra khi bạn di chuyển từ đầu đến cuối: (trong đó x là một phần tử được tải t)

xx000 -> xxx00 -> 0xxx0 -> 00xxx -> 000xx

Hãy thử sử dụng

myPager.setOffscreenPageLimit(ITEMS_COUNT-1); 

này sẽ cho các máy nhắn tin để giữ tất cả trong số họ trong bộ nhớ và không phá hủy/tạo bằng mọi thao tác vuốt (giữ một cái nhìn cận cảnh về quản lý bộ nhớ)

+1

Sẽ không gọi phương thức này là 'onCreateView' của một đoạn tab? (Nơi khung nhìn bố trí đoạn được nạp) – StarDust

+1

@StarDust có, điều này sẽ gọi onCreateView cho tất cả các mảnh cùng một lúc lúc bắt đầu. Rất khó, bạn có thể hết bộ nhớ hoặc đơn giản sẽ có màn hình đen hoặc chặn vì của quá trình tải đoạn. Giải pháp này là tốt đẹp nếu bạn phải tải 4 hoặc 5 mảnh ánh sáng nhưng tôi sẽ không làm điều đó cho 10 mảnh tải nặng. Bạn có thể đặt offscreenPageLimit thành bất kỳ số nào thấp hơn số phân đoạn, ví dụ nếu bạn có 10 trang và đặt giới hạn là 4 và bạn đang ở màn hình thứ 6, nó sẽ tải thêm 2 trong cả hai hướng như 000xx ** x * này * xx00 (giải pháp tốt nhất tôi nghĩ) – MariusBudin

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