2012-03-09 25 views
50

Tôi đã xem xét việc tạo chế độ xem danh sách khác biệt, giống như nhiều người khác và tôi bắt đầu bằng cách tìm cách mở rộng AbsListView. Theo tài liệu Android, AbsListView là:Có thể mở rộng AbsListView để thực hiện các triển khai ListView mới không?

Lớp cơ sở có thể được sử dụng để triển khai danh sách các mục được ảo hóa. Danh sách không có định nghĩa không gian ở đây. Ví dụ: subclases của lớp này có thể hiển thị nội dung của danh sách trong một mạng lưới, trong băng chuyền, dưới dạng ngăn xếp, v.v.

Sau một số nỗ lực và xem xét việc thực thi ListView, có vẻ như không thể có thể mở rộng AbsListView theo cách mà ListView thực hiện vì khớp nối của hai lớp và không có khả năng truy cập các thành viên gói nhất định. Tôi tình cờ gặp mẫu này Romain Guy:

AbsListView và AbsSpinner được thiết kế để mở rộng trong khuôn khổ . Chúng cũng có thể được mở rộng trong các ứng dụng của bên thứ 3 nhưng chúng tôi đã làm không phơi bày tất cả các trường và phương pháp được bảo vệ cần thiết. Chúng tôi muốn rất cẩn thận về cách chúng tôi hiển thị các API như vậy để không nhận được các công cụ cho các tiện ích mở rộng trong tương lai và các thay đổi nội bộ. Đề xuất hiện tại của chúng tôi là là bạn chỉ cần sao chép/dán mã bạn cần bên trong ứng dụng của bạn.

Tôi bắt đầu cố gắng làm điều này nhưng sao chép AbsListView trở thành một lỗ thỏ sao chép trong một loạt các nội dung khác và nó thực sự giống như một đề xuất thua. Tôi muốn xem liệu có ai đã thành công trong việc mở rộng AbsListView, người có thể chia sẻ phương pháp luận hay không.

[1] http://developer.android.com/reference/android/widget/AbsListView.html

[2] https://groups.google.com/forum/?fromgroups#!topic/android-developers/UhbR1tpVvF0

+0

"nó thực sự có vẻ giống như một đề xuất thua" - đó sẽ là đánh giá của tôi về tình hình. – CommonsWare

+0

Cảm ơn Mark. Điều đó dường như giống như phúc âm cho tôi. –

+0

có lẽ bạn có thể cụ thể hơn một chút về ý nghĩa của "phong cách danh sách khác biệt". Bạn có nghĩa là một cái gì đó không phải là một danh sách theo chiều dọc? hoặc bạn có nghĩa là cái gì đó là dọc, nhưng có màu sắc tùy chỉnh, quan điểm, tiêu đề, vv? – mtmurdock

Trả lời

4

Các bài là vào khoảng năm 2010, nhưng đánh giá của ông vẫn giữ đúng ngày hôm nay. Một số phương pháp cần thiết & trường được bảo vệ, để ngăn không tương thích trong tương lai có thể phát sinh từ việc thay đổi nội bộ của AbsListView.

Giải pháp tốt nhất vẫn là sao chép mã cho AbsListView vào dự án của bạn, cùng với các phụ thuộc cần thiết (lỗ thỏ bạn đã đề cập).

Trong thời gian chờ đợi, nếu bạn muốn mô tả loại Chế độ xem bạn đang cố tạo, chúng tôi có thể chỉ cho bạn theo hướng dễ dàng hơn việc tạo AbsListView của riêng bạn?

+0

Tôi muốn xây dựng chế độ xem hiển thị chế độ xem danh sách ngang, kết nối với bộ điều hợp và tái chế chế độ xem . Nó cần phải được cuộn và chấp nhận các khung nhìn có độ rộng khác nhau, mặc dù nó phải duy trì chiều cao nhất quán. –

+0

Ah. Bạn có thể muốn tận dụng công việc mà những người khác đã làm cho việc này. Ví dụ, có một listview ngang bán phổ biến tại: https://github.com/dinocore1/DevsmartLib-Android/blob/master/devsmartlib/src/com/devsmart/android/ui/HorizontalListView.java –

+0

Vâng, đó chính xác những gì tôi đang sử dụng nhưng, để hoàn toàn cùn, nó để lại rất nhiều để được mong muốn. Tôi đã phải sửa đổi rất nhiều và, thẳng thắn, nó không bao giờ có thể làm những thứ cần thiết vì cách các tập tin nhất định được đóng gói vào Android. À, không chiến đấu với trận chiến này nữa;) –

2

Tôi đã có cùng trải nghiệm khi cố gắng phân lớp ListViewAbsListView để phát triển bảng tính có thể cuộn 2D. Tôi đã kết thúc với lớp con của riêng mình là ViewGroup xử lý bố cục và một lớp con của TwoDScrollView để xử lý cuộn. Các bộ phận khó nhất nhận được các lỗ hổng hoạt động chính xác (ví dụ: tạo và đặt các khung nhìn mới trước khi chúng cuộn vào dạng xem) và đồng bộ các vị trí xem giữa các thành phần có thể cuộn. Tuy nhiên, với đủ thời gian, bạn có thể tạo ra một thành phần mạnh mẽ để lấy dữ liệu từ một Con trỏ và cuộn nó xung quanh khá trơn tru và nhanh chóng.

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