2015-08-27 14 views
9

Bối cảnh:Làm thế nào để vượt qua một bộ sưu tập lớn giữa hoạt động (Master-Detail dòng chảy)

Tôi đang thực hiện một ứng dụng mà đọc thông tin về các bộ phim từ một dịch vụ web. Dịch vụ web đó trả về một số thông tin về từng bộ phim (tiêu đề, ngày tháng, url áp phích, đạo diễn, diễn viên, v.v.).

Đó dịch vụ web hỗ trợ pagination, vì vậy những bộ phim được nạp trong gói 100.

Thực hiện:

Ý tưởng là để cho thấy một mạng lưới với tất cả các áp phích. Tự động yêu cầu thêm các mục khi người dùng cuộn xuống.

enter image description here

Khi một mục được nhấp người dùng điều hướng đến một bộ sưu tập với quan điểm chi tiết của bộ phim được lựa chọn, cho phép cuộn qua các chi tiết với một ViewPager.

enter image description here

Vì vậy, ý tưởng là để vượt qua các bộ sưu tập các bộ phim lấy trong lưới đến "DetailedGalleryActivity".

CẬP NHẬT: Cũng cần thiết để lưu trạng thái khi người dùng rời khỏi đoạn đó để xử lý vòng đời của đoạn. Bạn có thể kiểm tra nó cho phép tùy chọn nhà phát triển: Đừng giữ hoạt động

Vấn đề

tiếp cận đầu tiên của tôi là để serialize bộ sưu tập các bộ phim trong một json, và vượt qua nó như là một String thêm để hoạt động.

Nhưng vì danh sách phim lớn, nếu người dùng cuộn nhiều vào lưới, kích thước của json cực kỳ lớn đối với một gói (xem Max size of string data), nhận ngoại lệ thời gian chạy.

Tôi đã kiểm tra một số câu trả lời nói về lưu giữ dữ liệu trong SharedPreferences hoặc lưu trữ liên tục khác trước khi khởi chạy hoạt động chi tiết và sau đó truy cập vào nó từ chi tiết. Tôi thấy giải pháp này lạ vì nó bỏ qua các cơ chế truyền dữ liệu giữa các hoạt động với một giải pháp tùy chỉnh và thủ công.

Cách tiếp cận tốt nhất để giải quyết vấn đề này là gì?

+0

Bạn có thể lưu trữ json của mỗi phim trong một tệp (movie_1, movie_2, v.v.) và sau đó chỉ chuyển id của phim và lấy dữ liệu của phim hiện tại từ tệp. Có lẽ, xóa tất cả các tệp này khi bạn hoàn thành, nên là một ý tưởng hay. – GVillani82

+0

Có lý do cụ thể nào mà bạn muốn sử dụng các hoạt động thay vì phân đoạn không? Nếu bạn sử dụng các đoạn, bạn có thể chỉ cần tải chi tiết về một mảng và chuyển dữ liệu dưới dạng tham số. – Jordan

Trả lời

5

Tôi cũng không chắc chắn nếu đây là một gợi ý hay.

Tạo một lớp khác và thêm phương thức tĩnh, hãy đặt tên cho nó là MovieUtil.

// mẫu

private class MovieUtil { 
    private static List<Movies> movies; 
    public static List<Movies> getMovies();//getter 
    public static void setMovies(List<Movie> movies);//setter 
} 

Trước khi bạn bắt đầu DetailedGalleryActivity thiết lập danh sách các phim trên MovieUtil.setMovies()

đó trở đi onCreate của DetailedGalleryActivity khởi tạo danh sách bằng cách sử dụng các MovieUtil.getMovies()

Lưu ý: bạn có thể xóa danh sách phim trên movieutil khi đóng BranchGalleryActivity.

+0

Đây là một ý tưởng hay - kỹ thuật xuất hiện trong câu trả lời cho câu hỏi sau trong 'Sử dụng một lớp đơn' http://stackoverflow.com/questions/4878159/android-whats-the-best-way-to-share -data-between-hoạt động – Jordan

+0

tôi cũng không biết đó là phương pháp đơn hoặc tĩnh tốt hơn, có rất nhiều người tranh luận đó là thực sự tốt hơn. nhưng tôi sử dụng phương pháp tĩnh trong loại kịch bản này để đơn giản vì lợi ích (?) .. :) – ville101

+0

Tôi đã cập nhật câu hỏi, vì giải pháp này giải quyết việc truyền dữ liệu giữa các hoạt động nhưng không hoạt động để lưu thông tin onSaveInstanceState() để tiếp tục giao diện nếu hoạt động bị hủy – Addev

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