2012-10-19 30 views
22

Tôi đang nhầm lẫn về sự khác biệt giữa postionrow id trong ListActivity.onListItemClick().Sự khác biệt thực tế Giữa id vị trí và hàng trong onListItemClick()

Các tài liệu có sau đây:

position The position of the view in the list 
id  The row id of the item that was clicked 

Có sự khác biệt thực tiễn giữa hai? Tôi giả sử, vì có hai tham số khác nhau, có những tình huống mà các giá trị khác nhau, nhưng dựa trên từ ngữ được sử dụng trong tài liệu, thật khó để thấy sự khác biệt đó có thể là gì. Có phải là một trong số họ có thể giữ giá trị của một ID hàng cơ sở dữ liệu được cung cấp bởi một Cursor hoặc một số khả năng đặc biệt khác không?

+2

Giả sử bạn sắp xếp danh sách. Sau đó, vị trí sẽ rất khác so với id. Vị trí là từ trên xuống dưới và id là số nhận dạng duy nhất. –

+0

Mã định danh duy nhất được gán sau đó như thế nào? Thứ tự của các mục trong ListView khi nó được phổ biến lần đầu tiên, trước khi bất kỳ thao tác nào như sắp xếp được thực hiện với nó? –

Trả lời

30

vị trí: Vị trí của điểm trong danh sách
id: Các id hàng của mặt hàng đó mà được nhấp

Một vị trí bắt đầu từ 0, trên xuống dưới của ListView, trong khi để có được một id hàng thích hợp, điều quan trọng là con trỏ, được chuyển đến bộ điều hợp, có chứa một cột được gọi là '_id' đại diện cho id duy nhất cho mỗi hàng trong bảng.

Nếu bạn đang sử dụng một ArrayAdapter, positionid sẽ trở thành giống nhau. Id sẽ là giá trị trả về của Adapter.getItemId(int) vì vậy nếu bạn sử dụng một ArrayAdapter nó sẽ giống như vị trí - một tìm kiếm nhanh chóng của mã nguồn ArrayAdapter cho thấy nó đang sử dụng vị trí trả về; để tìm ra id.

+0

Nếu bảng không chứa trường '_id', thì có an toàn khi nói rằng vị trí và ID hàng sẽ giống nhau không? –

+4

Dường như nếu bạn đang sử dụng arrayAdapter thì nó giống nhau. Id sẽ là giá trị trả về của Adapter.getItemId (int) vì vậy nếu bạn sử dụng một ArrayAdapter nó sẽ giống như vị trí - tìm kiếm nhanh mã nguồn ArrayAdapter cho thấy nó đang sử dụng vị trí trả về; để làm việc ra các id :) –

+3

Điều này nhìn ra trường hợp có một 'ListView' với một cái nhìn tiêu đề. Trong trường hợp đó vị trí = id + 1. [Xem câu trả lời của tôi] (http://stackoverflow.com/a/24531354/383414) –

24

answer by Lazy Ninja chủ yếu là chính xác, tuy nhiên, hãy xem trường hợp sử dụng ArrayAdapter với chế độ xem tiêu đề được thêm bằng cách gọi phương thức ListView.addHeaderView(View).

Nếu danh sách của bạn có một mục tiêu đề, nó sẽ được ở vị trí 0.

Vì vậy, người đầu tiên "thực" mục trong danh sách sẽ có:

  • position = 1
  • id = 0

Nói chung, position = id + number_of_header_views


Điều quan trọng là nhận ra nếu bạn quyết định thêm chế độ xem tiêu đề vào danh sách mã đang hoạt động chính xác.

Nếu bạn đang truy cập vào các mục của bạn sử dụng position, sau đó mã của bạn cần được cập nhật dọc theo dòng sau đây:

  • sử dụng position - 1 như chỉ số
  • sử dụng id như chỉ số
  • sử dụng ListView.getItemAtPosition(int) thay của Adapter.getItem(int)

Cũng xem câu hỏi này để thảo luận liên quan:

+2

Sự khác biệt được đăng bởi bạn là điểm rất quan trọng trong việc hiểu được listview với tiêu đề .. Cảm ơn bạn rất nhiều cho câu trả lời bổ sung của bạn ở đây .. – Kushal

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