2012-06-05 27 views
5

Tôi nhận được câu hỏi này do một câu trả lời trên đây, nhưng không giải thích làm thế nào để làm những gì tôi đang hỏi How to get the id of the row in onItemClick(ListView) when using a custom Adapter?Làm cách nào để ghi đè phương thức getItemId (int pos) từ CursorAdapter?

Câu trả lời được chấp nhận trong câu hỏi đó là những gì tôi cần vì tôi cũng đang làm cho tôi bộ điều hợp riêng (CursorAdapter), do đó tôi sẽ có cùng một vấn đề. Vấn đề là tôi không có ý tưởng làm thế nào để đạt được điều đó. Tôi đang xem Tài liệu và không chắc chắn cách truy cập cột _id từ con trỏ. Vì Doc không có hằng số mà chúng ta có thể lấy thông tin từ tôi bị kẹt. Bất kỳ trợ giúp tìm ra nó sẽ được nhiều đánh giá cao.

EDIT: Tôi không rõ ràng về câu hỏi của tôi, nhưng chỉ để làm rõ, như tiêu đề, làm thế nào tôi có thể ghi đè lên phương thức getItemId() trong lớp tùy chỉnh CursorAdapter mà tôi đã tạo?

+0

I don Không hiểu vấn đề của bạn ... Tôi có một vài bộ điều hợp con trỏ tùy chỉnh, tôi chưa bao giờ phải ghi đè điều đó và tôi nhận được id hàng từ con trỏ tốt ... Bạn đang cố gắng làm gì và bạn đang cố gắng lấy đâu id đó? – Barak

+0

Khi tôi nhấp vào một thành viên từ chế độ xem danh sách, tôi muốn có thể truy cập vào cơ sở dữ liệu và sử dụng ID đó để truy cập thông tin thành viên đó. Vì vậy, tôi cần phải chắc chắn rằng tôi thực sự nhận được _id. Nhưng tôi thì không. – Andy

+0

Tôi muốn được nhìn thấy lý do tại sao không ... bạn nên nếu bạn đang sử dụng 'onListItemClick' với danh sách của bạn. – Barak

Trả lời

9

Giả sử bạn không có con trỏ như một thành viên của Adaptor của bạn:

@Override 
public long getItemId(int position) { 
    Cursor cursor = getCursor(); 
    cursor.moveToPosition(position); 
    return cursor.getLong(mCursor.getColumnIndex("_id")); 
} 
+0

Ahh, để gọi getCursor lấy con trỏ liên kết mà CursorAdapter đang sử dụng? Nên đã nhận ra rằng !! Cảm ơn – Andy

+0

Vâng, đây là tham chiếu cho [getCursor()] (http://developer.android.com/reference/android/widget/CursorAdapter.html#getCursor%28%29) – Sam

+0

Và nếu bạn đang sử dụng CursorAdapter chứ không phải SimpleCursorAdapter sau đó bạn nên đặt vị trí trong newView như thế này '@Override chế độ xem công khai Chế độ xem mới (Ngữ cảnh bối cảnh, Con trỏ trỏ, Bố cục ViewGroup) { LayoutInflater inflater = LayoutInflater.from (parent.getContext()); chủ sở hữu.deleteImageView = (ImageView) retView.findViewById (R.id.delete); holder.deleteImageView.setTag (cursor.getPosition()); trả lại chế độ xem lại; } ' – Chetna

4

tôi nkow này không trả lời các câu hỏi được đặt ra, nhưng Sam đã chăm sóc đó. Tôi nghĩ rằng tôi muốn đăng bài này bởi vì có vẻ như có một số nhầm lẫn về phần OP.

Sau đây là một phương pháp onListItemClick từ một hoạt động mà chứa một danh sách được tạo ra với một bộ chuyển đổi con trỏ tùy chỉnh:

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    // Your code here 
} 

long id là id hàng cho các dữ liệu chứa trong hàng nhấp (khi danh sách được nuôi dưỡng bởi bộ điều hợp con trỏ). Không cần ghi đè getItemId.

Bạn chỉ cần ghi đè số getItemId (theo kinh nghiệm của tôi) nếu bạn làm điều gì đó như đặt thông tin từ các hàng khác nhau vào một dòng. Miễn là tất cả dữ liệu của bạn cho một dòng danh sách là từ cùng một hàng trong cơ sở dữ liệu, không cần phải đi đến rắc rối đó.

Tôi giả sử một lần khác bạn có thể cần phải sử dụng nó sẽ là nếu bạn lấy dữ liệu từ con trỏ và đặt nó vào một mảng và sau đó sử dụng bộ điều hợp mảng ... nhưng có vẻ khá vòng ...

+0

Vâng nó là _id hàng mà tôi muốn, ít nhất là từ cơ sở dữ liệu. Nhưng tôi thấy những gì bạn đang nói – Andy

+0

Đó ** là ** id hàng (hoặc _id nếu bạn muốn nghĩ về nó trong điều khoản của tên cột cơ sở dữ liệu). Đó là lý do tại sao một colum gọi là '_id' là * bắt buộc * trong bất kỳ con trỏ nào đang cung cấp một bộ chuyển đổi ... khung công tác sử dụng nó và truyền nó đi để bạn có thể sử dụng nó khi bạn nhấp vào một dòng. – Barak

+0

ahh. Gotcha. Cảm ơn các đầu vào. Nhiều đánh giá cao. – Andy

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