2010-10-26 26 views
8

Tôi vừa thêm tiêu đề vào ListView và tôi phải thay đổi một loạt mã vì tiêu đề cơ bản trở thành vị trí 0 (Có nghĩa là các chỉ mục con trỏ của CursorAdapter của tôi không khớp với các chỉ báo của danh sách. 1 giờ). Tại sao? Điều này có vẻ hơi ngớ ngẩn với tôi.Có lý do chính đáng nào cho tiêu đề ListView chiếm vị trí không?

Lý do duy nhất tôi có thể đưa ra là nhà phát triển có thể muốn truy cập tiêu đề. Khỏe. Cung cấp một cái gì đó như getListView(). GetHeader().

+2

Chỉ cần đợi cho đến khi bạn phải đặt tiêu đề phần của riêng mình. Đó là một cơn ác mộng. – Falmarri

+0

Vì vậy, miễn là bạn đang đề cập đến Bộ điều hợp được liên kết với danh sách, bạn không nên có bất kỳ sự cố ngoại tuyến nào. Thêm đầu trang/chân trang kết thúc tốt đẹp Bộ điều hợp của bạn và thực hiện những điều chỉnh này cho bạn. –

+0

Tôi có thể đặt vào tiêu đề phần của riêng mình tốt. Với một ArrayAdapter, tiêu đề phần của tôi là các mục danh sách thực tế. Với CursorAdapter, mỗi mục có một tiêu đề như một phần của View của nó, nhưng nó chỉ được hiển thị cho mục trên cùng của mỗi phần. Vấn đề với cả hai cách tiếp cận này là tiêu đề biến mất; vì vậy bạn có thể kết thúc với một danh sách đầy đủ các mục và không biết tiêu đề nào họ đang ở dưới vì tiêu đề đã cuộn ra khỏi đầu màn hình. Tôi đã thử nghiệm với tiêu đề ListView để có được xung quanh này, nhưng dường như họ di chuyển ra là tốt. – Andrew

Trả lời

1

Tôi tin rằng ListView không có gì khác ngoài danh sách các yếu tố View. Nếu bạn thêm tiêu đề (hoặc chân trang cho vấn đề đó, nó sẽ không tạo ra bất kỳ sự khác biệt nào) cho ListView của bạn, phần tử đó về cơ bản không khác với bất kỳ phần tử nào khác được thêm tự động thông qua ListAdapter. Sự khác biệt nhỏ duy nhất là phần tử header (và footer) sẽ được cố định và không bị ảnh hưởng bởi những gì mà ListAdapter thực hiện với danh sách - chúng vẫn không là gì ngoài các phần tử thông thường.

21

Đối với một số lý do position (từ onItemClick) được gắn liền với số lượng các mục trong ListView (không adapter), bao gồm cả đầu và cuối trang. Khi bạn đặt OnItemClickListener, bạn nên truy xuất mục được nhấp bằng cách gọi listView.getItemAtPosition(position) thay vì adapter.getItem(position).

Thực tế, bạn nên luôn sử dụng getItemAtPosition, vì cách đó không quan trọng nếu ListView của bạn có đầu trang và chân trang và nếu bạn thêm tiêu đề mới, bạn sẽ không cần phải thay đổi mã của mình.

Và nếu bạn không muốn tiêu đề của mình được chọn, bạn nên thêm tiêu đề theo cách này: listView.addHeaderView(headerView, null, false).

+0

Đẹp nhất. +1 từ phía tôi. –

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