2012-06-05 6 views
5

ich diese Frage bin immer wegen einer anderen Antwort hier, aber nicht erklären, wie das zu tun, was ich How to get the id of the row in onItemClick(ListView) when using a custom Adapter?Wie überschreiben Sie die Methode getItemId (int pos) von CursorAdapter?

Die Antwort bin zu fragen, die in dieser Frage angenommen wurde, ist, was ich brauche, da ich auch mache meine eigener benutzerdefinierter Adapter (CursorAdapter), daher werde ich das gleiche Problem haben. Das Problem ist, dass ich keine Ahnung habe, wie ich das erreichen kann. Ich schaue auf den Doc und bin mir nicht sicher, wie ich von einem Cursor auf die _id-Spalte zugreifen kann. Da der Doc nicht die Konstante hat, von der wir die Information bekommen, stehe ich fest. Jede Hilfe, die es herausfinden würde, würde sehr geschätzt werden.

EDIT: Ich war nicht klar, was meine Frage war, aber nur um zu klären, wie der Titel, wie kann ich die getItemId() -Methode in der benutzerdefinierten CursorAdapter benutzerdefinierte Klasse überschreiben?

+0

I don verstehe dein Problem nicht ... Ich habe mehrere benutzerdefinierte Cursor-Adapter, ich musste das nie überschreiben und ich bekomme die Zeilen-ID vom Cursor ganz gut ... Was versuchst du zu tun und wo willst du hinkommen? diese ID? – Barak

+0

Wenn ich auf ein Mitglied in der Listenansicht klicke, möchte ich in die Datenbank gehen und diese ID verwenden, um auf diese Mitgliederinformationen zuzugreifen. Also muss ich sicherstellen, dass ich das _id bekomme. Aber ich bin nicht. – Andy

+0

Ich wäre daran interessiert zu sehen, warum nicht ... Sie sollten sein, wenn Sie 'onListItemClick' mit Ihrer Liste verwenden. – Barak

Antwort

9

Angenommen, Sie nicht den Cursor als ein Mitglied Ihrer Adapter haben:

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

Ahh, ruft also getCursor den zugehörigen Cursor, den der CursorAdapter benutzt? Sollte das erkannt haben !! Dank – Andy

+0

Ja, hier ist eine Referenz für [GetCursor()] (http://developer.android.com/reference/android/widget/CursorAdapter.html#getCursor%28%29) – Sam

+0

Und Wenn Sie mit Cursoradapter und nicht SimpleCursorAdapter dann sollten Sie die Position in NewView wie diese '@Override Öffentlichkeit NewView (Context Kontext, Cursor Cursor, Viewgroup parent) { LayoutInflater inflater = LayoutInflater.from (parent.getContext()) festgelegt; Halter.deleteImageView = (ImageView) retView.findViewById (R.id.delete); halter.deleteImageView.setTag (cursor.getPosition()); Rückkehr retView; } ' – Chetna

4

ich nkow dies nicht die Frage gestellt nicht beantworten, aber Sam sorgte dafür. Ich dachte, ich würde das hier posten, weil es auf dem OP-Teil etwas Verwirrung gibt.

folgt ein onListItemClick Verfahren aus einer Tätigkeit, die eine Liste mit einem benutzerdefinierten Cursor Adapter erstellt enthält:

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

long id ist die Zeilen-ID für die in der Zeile enthaltenen Daten angeklickt (wenn die Liste von zugeführt wird, ein Cursor-Adapter). Keine Notwendigkeit, getItemId zu überschreiben.

Sie müssen nur die getItemId (meiner Erfahrung nach) überschreiben, wenn Sie etwas tun, wie Informationen aus verschiedenen Zeilen in eine einzige Zeile setzen. Solange alle Ihre Daten für eine Listenzeile aus derselben Zeile in der Datenbank stammen, müssen Sie nicht zu diesem Problem gehen.

nehme ich eine andere Zeit, die Sie brauchen, es zu benutzen wäre, wenn Sie Daten von einem Cursor nehmen und es in ein Array gesetzt und verwendete dann ein Array Adapter .. aber das scheint ziemlich Kreisverkehr ...

+0

Nun, es ist die Zeile _id, die ich will, zumindest aus der Datenbank. Aber ich sehe, was Sie sagen – Andy

+0

Das ** ist ** die Zeilen-ID (oder _id, wenn Sie es vorziehen, in Bezug auf die Datenbank Spalte Namen) denken. Das ist der Grund, warum eine Spalte mit dem Namen '_id' * in jedem Cursor benötigt wird, der einen Adapter füttert ... das Framework verwendet es und gibt es weiter, damit Sie es verwenden können, wenn Sie auf eine Zeile klicken. – Barak

+0

ahh. Erwischt. Danke für die Eingabe. Sehr geschätzt. – Andy

Verwandte Themen