5

Đây không phải là sự cố về mã, tôi giải thích nguyên tắc là OK.Xây dựng chế độ xem giống như lịch có thể cuộn vô hạn trong Android

Tôi đã nghiên cứu cách xây dựng một chế độ xem lịch giống như cuộn vô hạn trong Android, nhưng tôi đã gặp phải sự bế tắc.

Hiện tại tình huống khó xử của tôi là hầu hết các chế độ xem tương tự đều có con của họ đặt tương đối với nhau theo kiểu lặp lại. Với điều này, tôi có nghĩa là:

mục 4 đến sau mục 3, xuất hiện sau mục 2 và có khoảng đệm/lề cố định giữa tất cả các mục.

Điều tôi cần là cách tạo ra chế độ xem có thể cuộn dài vô hạn có thể hoặc không chứa các mục. Các mục nên được đặt ở các vị trí biến trong chế độ xem. Cách tốt nhất tôi có thể mô tả chế độ xem tương tự là chế độ xem một ngày giống như lịch vô hạn có thể cuộn được.

Cho đến nay, hai cược tốt nhất của tôi đang sử dụng RecyclerView mới với tuỳ chỉnh LayoutManager (điều này có vẻ rất phức tạp và vẫn chưa được Google ghi lại hoàn toàn). Tôi thích cách tiếp cận này bởi vì, trong số những thứ khác, nó được tối ưu hóa để hiển thị các bộ lớn trong một khung nhìn giới hạn.

Giải pháp khác của tôi là xây dựng hoàn toàn tùy chỉnh View. Tuy nhiên, với giải pháp đó, tôi mất bộ điều hợp trừ khi tôi xây dựng chế độ xem vùng chứa (có thể phức tạp hơn việc xây dựng trình quản lý bố cục).

Bạn sẽ giải quyết vấn đề như thế nào? Lời khuyên được đánh giá cao, tôi không cần các ví dụ mã, chỉ là những ý tưởng mà đường dẫn là cách tốt nhất để giải quyết vấn đề này.

Cảm ơn.

Xin lỗi nếu tôi đã hiểu lầm những hướng dẫn

Chỉnh sửa: Làm thế nào tôi giải quyết vấn đề này giải pháp đầu tiên của tôi để sử dụng RecyclerView với một Decorator đặc biệt có vẻ đầy hứa hẹn, nhưng nó vẫn là một "hack" vì vậy chúng tôi quyết định không đi giải pháp đó vì chúng tôi sợ những biến chứng mà nó sẽ tạo ra.

Để giải quyết vấn đề tôi đã đi với SurfaceView thay vì Adapter, điều này có nghĩa là phải viết lại tất cả các chức năng adapter cho SurfaceView của tôi, nhưng nó dường như là cách tốt nhất để giải quyết vấn đề này cho trường hợp sử dụng của tôi.

Nó vẫn sẽ là tốt đẹp để xây dựng một Viewgroup tùy chỉnh có thể xử lý các loại vấn đề bố trí.

Trả lời

0

Những gì bạn có thể tìm kiếm là FragmentStatePagerAdapter, nơi bạn có thể triển khai chế độ xem được vuốt, nghĩa là khi người dùng (ví dụ) vuốt sang phải, một chế độ xem hoàn toàn mới được hiển thị.

Sử dụng FragmentStatePagerAdapter, bạn có thể xử lý một lượng lớn lượt xem mà không làm tràn bộ nhớ, vì PagerAdapter cụ thể này chỉ giữ trạng thái của chế độ xem và rõ ràng có nghĩa là xử lý các tập hợp lớn.

Giữ ví dụ về lịch, bạn có thể triển khai điều hướng được vuốt giữa các tuần ví dụ và tạo lượt xem theo tuần theo yêu cầu trong khi chỉ giữ số ví dụ của năm và số tuần làm số nhận dạng.

Có rất nhiều hướng dẫn trực tuyến dành cho Android, có thể bạn có một cái nhìn tại this một

+1

Tôi nghĩ rằng bạn đã hiểu sai mục tiêu của mình một chút, đó là lỗi của tôi vì tôi nên có một bản phác thảo những gì tôi đang cố gắng tìm ra. Nhưng cảm ơn vì phản hồi. – Andreas

6

ListViewListAdapter được dựa trên một danh sách cố định, do đó vô-thanh cuộn hiện tại chỉ tiếp tục bổ sung ngày càng nhiều dữ liệu vào cuối danh sách.

Nhưng những gì bạn muốn là cuộn tương tự như ứng dụng Lịch của Google trong đó có một bi-directional cuộn vô hạn. Vấn đề với việc sử dụng ListViewListAdapter trong trường hợp này là nếu bạn thêm dữ liệu vào trước danh sách, chỉ mục của bất kỳ mục nào sẽ thay đổi để danh sách nhảy.

Nếu bạn thực sự bắt đầu suy nghĩ về điều này từ quan điểm MVC, bạn nhận ra rằng ListAdapter không cung cấp mô hình phù hợp với nhu cầu này.

Thay vì có chỉ mục tuyệt đối (ví dụ: 1, 2, 3, 4, v.v.), những gì bạn thực sự muốn là chỉ mục tương đối, thay vì nói "Cung cấp cho tôi mục ở chỉ mục 42" bạn muốn nói "đây là mục, đưa cho tôi năm mục trước khi nó ". Hoặc bạn có một cái gì đó giống như một ngày lịch là tuyệt đối; chưa — không giống như bộ nhớ của thiết bị — nó có hiệu quả không bắt đầu hoặc kết thúc, vì vậy những gì bạn thực sự muốn ở đây là một "cửa sổ" vào một phần của dữ liệu đó.

Mô hình dữ liệu tốt hơn cho điều này sẽ là một loại hàng đợi được kết thúc hai lần, một phần là bộ nhớ cache LRU. Bạn đặt một giới hạn về số lượng các mục trong cấu trúc. Sau đó, khi các mục trước được nạp (người dùng đang cuộn lên) các mục ở mặt sau được đẩy ra, và khi các mục tiếp theo được thêm vào (người dùng đang cuộn xuống), các mục ở phía trước bị đẩy ra.

Ngoài ra, bạn sẽ có một ngưỡng nơi bạn có trong một vài mục của một cạnh của cấu trúc, sự kiện "loadNext" hoặc "loadPrevious" sẽ kích hoạt và gọi lại cuộc gọi mà bạn đã thiết lập để đẩy thêm dữ liệu vào mép của cấu trúc. Vì vậy, một khi bạn đã tìm ra rằng mô hình của bạn là hoàn toàn khác nhau, bạn nhận ra rằng ngay cả RecyclerView sẽ không giúp bạn ở đây bởi vì nó gắn liền với mô hình lập chỉ mục tuyệt đối. Bạn cần một số loại phân lớp ViewGroup tùy chỉnh để tái chế các khung nhìn mục giống như một ListView, nhưng có thể thích ứng với hàng đợi được kết thúc gấp đôi. Và khi bạn tìm kiếm mã repos cho một cái gì đó như thế này, không có gì ra khỏi đó.

Nghe có vẻ thú vị. Tôi sẽ đăng một liên kết khi tôi bắt đầu một dự án. (Đáng buồn thay, nó sẽ không được thực hiện bằng bất cứ cách kịp thời để giúp bạn ngay bây giờ, xin lỗi.)

Cái gì đó có thể giúp bạn một chút sớm: nhìn vào thực hiện Calendar của Google và xem cách họ đã làm điều đó: Google Calendar Git repo

+1

Tôi nghĩ rằng bạn hiểu tình trạng khó xử của tôi, và tôi đang ở trên cùng một trang như bạn. Không có gì ngoài đó thực hiện chính xác điều này. Các ví dụ cuộn "vô hạn" ra khỏi đó chỉ đơn thuần là quan tâm đến việc tải thêm các mục, và đó không phải là vấn đề đối với tôi - khi bạn chỉ ra rất hùng hồn. Tôi vẫn cảm thấy rằng, trong số các lựa chọn có sẵn ngay bây giờ, RecyclerView với layoutmanager và itemdecorations có lẽ là lựa chọn tốt nhất trước khi cố gắng thay đổi cách ViewGroup hoạt động trên Android. Cảm ơn các đầu vào. – Andreas

+0

Bạn có thể xem mã nguồn cho lịch của Google và xem cách họ đã làm - tôi đã cập nhật câu trả lời của mình. Tôi muốn có một cái gì đó chung chung hơn có thể di chuyển hai chiều cho nhiều hơn chỉ là ngày tháng. –

+0

Giải thích rõ ràng .. Tôi hy vọng nhóm UI Android xây dựng một thành phần giao diện người dùng cho bộ điều hợp mục vô hạn với mô hình dữ liệu tương đối. –

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