2011-11-19 22 views
11

Tôi có một chuỗi JSON với nhiều trường hợp các nội dung sauBộ điều hợp để sử dụng - BaseAdapter hoặc ArrayAdapter?

  1. Tên
  2. nhắn
  3. Timestamp
  4. url hồ sơ ảnh

Tôi muốn tạo ra một ListView mỗi danh sách nơi sẽ có ở trên. Bộ điều hợp nào tốt hơn tôi cần mở rộng cho trường hợp cụ thể này, để tạo Bộ điều hợp tùy chỉnh?

+1

http://stackoverflow.com/questions/3349693/baseadapter-or-arrayadaptor-android kiểm tra điều này. –

Trả lời

11

Giả định của tôi là bạn đã phân tích cú pháp chuỗi JSON thành một mô hình đối tượng trước khi xem xét cả hai trường hợp ... hãy gọi lớp này là Profile.

Chiến lược 1

Một ArrayAdapter là đủ với một phương pháp overriden getView (..) sẽ nối nhiều lĩnh vực của bạn với nhau theo cách bạn muốn.

ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles) { 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v; 
     // use the ViewHolder pattern here to get a reference to v, then populate 
     // its individual fields however you wish... v may be a composite view in this case 
    } 
} 

tôi khuyên các mẫu ViewHolder cho các danh sách có khả năng lớn: https://web.archive.org/web/20110819152518/http://www.screaming-penguin.com/node/7767

Nó làm cho một sự khác biệt rất lớn.

  • Ưu điểm 1. Cho phép bạn áp dụng bố cục phức tạp cho từng mục trên ListView.
  • Ưu điểm 2. Không yêu cầu bạn thao tác toString() để phù hợp với màn hình dự định của bạn (sau khi tất cả, giữ mô hình và xem logic riêng biệt không bao giờ là một thực hành thiết kế xấu).

Chiến lược 2

Ngoài ra, nếu phương thức toString() trên lớp đại diện của bạn đã có một định dạng mà có thể chấp nhận để trưng bày, bạn có thể sử dụng mà không cần ArrayAdapter trọng getView().

Chiến lược này đơn giản hơn, nhưng buộc bạn phải đập vỡ mọi thứ thành một chuỗi để hiển thị.

ArrayAdapter<Profile> profileAdapter = new ArrayAdapter<Profile>(context, resource, profiles) 
+0

okay thanks :) bất kỳ lý do cụ thể nào? –

+4

OverAdiding BaseAdapter trong trường hợp này bổ sung thêm tính phức tạp mà không có lợi thế thực sự. Bạn sẽ phải thực hiện getCount(), getItemId(), getItem (..), v.v. và sẽ thấy rằng việc triển khai của bạn khá là chuẩn bị. – jkschneider

+0

@jkschneider - câu trả lời hoàn hảo. Chính xác lý do tôi cần để sử dụng bộ điều hợp mảng –

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