2012-03-26 20 views
29

Thay vì tạo nhiều hoạt động, tôi muốn thay đổi ArrayAdapter của ListView nếu cần. Tôi không thấy bất kỳ đề cập nào trong số API về việc có hay không gọi số setAdapter() nhiều lần.Có thể tự động thay đổi bộ điều hợp của ListView không?

Cụ thể hơn, giả sử tôi muốn bắt đầu một hoạt động có ListView. Trong ví dụ này, ListView được khởi tạo với số listView.setAdapter(this) từ, ví dụ: CategoryArrayAdapter.

Sau đó, người dùng chọn một danh mục. Không bắt đầu hoạt động mới, mã sẽ đặt bộ điều hợp mới cho cùng một ListView. Bộ điều hợp mới, nói ItemArrayAdapter gọi listView.setAdapter(this).

Có ai có kinh nghiệm làm điều này thành công hay biết lý do cụ thể tại sao việc này không nên được thực hiện?

Trả lời

30

Tôi không thấy bất kỳ đề cập nào trong API về việc có hay không gọi setAdapter() nhiều lần.

Câu trả lời đơn giản là CÓ, và tôi đã làm những việc tương tự trước đây.

Đây chính xác là lý do tại sao Adapter đã tồn tại và được cung cấp trong API. Nội dung thực tế (Mô hình) và cách hiển thị (Xem) cho từng mục danh sách được tách biệt và được triển khai bên trong android.widget.Adapter, thay vì được liên kết trực tiếp với android.widget.AdapterView. Miễn là bộ điều hợp của bạn được triển khai đúng cách, bạn có thể hoán đổi/thay đổi bộ điều hợp cơ bản thực sự gắn với ListView, đơn giản bằng cách gọi phương thức setAdapter().

1

Đặt lại bộ điều hợp là ok, nhưng lưu ý rằng có thể có trục trặc GUI khi làm như vậy, vì chế độ xem có bộ điều hợp đang được thay đổi phải được vẽ lại bằng dữ liệu mới. Bên cạnh đó, bạn sẽ ổn thôi.

+0

Bạn đã làm điều này trước đây chưa? –

+0

@ JeffAxelrod: Vâng, tôi đã làm điều đó. – Bondax

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