Tôi đang thiết kế một ứng dụng cho phép người dùng lật giữa nhiều trang trong ViewPager. Tôi đã cố gắng tìm ra cách loại bỏ một thể hiện Fragment từ một trang khi nó không còn hiển thị trên màn hình, lưu nó vào (ví dụ, HashMap), và sau đó khôi phục nó để khi người dùng lật trở lại trang đó, các chế độ xem và mọi thứ khác trong đó sẽ ở trong cùng trạng thái trước khi xóa. Ví dụ: trang đầu tiên của tôi là màn hình đăng nhập giúp các thành phần bố cục nhất định trên trang cụ thể đó hiển thị/ẩn trên đăng nhập thành công. Khi tôi lật lại đủ trang rồi lật lại trang đầu tiên, bố cục được đặt lại. Điều này trở thành một vấn đề đối với một trang khác của tôi chứa một mạng lưới cuộn lớn, ngang/dọc của dữ liệu mà tôi sử dụng một chuỗi trong nền để vẽ khi nó khởi tạo. Tôi sử dụng hộp thoại tiến trình để thông báo cho người dùng về tiến độ tải và điều đó trở nên thực sự gây phiền nhiễu mỗi khi tôi phải tải nó.Android: Viewpager và FragmentStatePageAdapter
Vì vậy, tôi đã làm một số nghiên cứu ...
tôi duyệt qua các mã nguồn cho FragmentStatePageAdapter và trong destroyItem() gọi lại, trạng thái của dụ Fragment đang được gỡ bỏ sẽ được lưu vào một ArrayList. Khi một cá thể mới của Fragment được tạo trong callback instantiateItem(), nếu một cá thể của một mục chưa tồn tại (chúng theo dõi điều này bằng cách sử dụng một ArrayList), một cá thể Fragment mới được tạo và trạng thái đã lưu của nó được khởi tạo với dữ liệu Fragment.SavedState tương ứng. Thật không may, dữ liệu này không bao gồm trạng thái mà Views được mặc dù tôi nhận thấy rằng đối với các trang có GridView/ListView, trạng thái của Views được khôi phục bằng cách nào đó (nếu tôi cuộn đến một số vị trí ngẫu nhiên, lật một vài trang và quay lại , nó sẽ không được đặt lại).
Theo API:
Các trạng thái lưu trữ không thể chứa phụ thuộc vào những mảnh còn lại - đó là nó không thể sử dụng putFragment (Bundle, String, Fragment) để lưu trữ một tham chiếu đoạn vì tham chiếu đó có thể không hợp lệ khi trạng thái đã lưu này được sử dụng sau này . Tương tự như vậy, mục tiêu của Fragment và kết quả là mã không được bao gồm trong trạng thái này.
Là một noob cho Android, tôi không hoàn toàn chắc chắn rằng tôi hiểu câu cuối cùng.
Điều đó đang được nói, có cách nào để lưu vào bộ nhớ cache Xem trạng thái không? Nếu không, tôi nghĩ tôi sẽ tiếp tục và bỏ đi tất cả các trang mảnh trong bộ nhớ.
Bạn cần phải kế thừa từ FragmentStatePagerAdapter, nếu bạn chỉ sử dụng FragmentPagerAdapter sau đó onSaveInstanceState sẽ không được gọi. – Scott