2012-06-05 19 views
5

sto ottenendo questa domanda a causa di un'altra risposta qui, ma non spiegava come fare quello che sto chiedendo How to get the id of the row in onItemClick(ListView) when using a custom Adapter?Come sovrascrivere il metodo getItemId (int pos) da CursorAdapter?

La risposta che è stata accettata a questa domanda è che cosa ho bisogno dal momento che sto anche facendo la mia proprio adattatore personalizzato (CursorAdapter), quindi avrò lo stesso problema. Il problema è che non ho idea di come farlo. Sto guardando il documento e non sono sicuro di come accedere alla colonna _id da un cursore. Dal momento che il Doc non ha la costante che possiamo ottenere da questa informazione sono bloccato. Qualunque aiuto per capirlo sarebbe molto apprezzato.

EDIT: Non ero chiaro su quale fosse la mia domanda, ma solo per chiarire, come il titolo, come posso sovrascrivere il metodo getItemId() nella classe personalizzata CursorAdapter che ho creato?

+0

I don capisco il tuo problema ... Ho diversi adattatori per cursori personalizzati, non ho mai dovuto ignorarlo e ho ottenuto l'id della riga dal cursore bene ... Che cosa stai cercando di fare e dove stai cercando di ottenere quell'id? – Barak

+0

Quando faccio clic su un membro dalla visualizzazione elenco, voglio poter accedere al database e utilizzare quell'ID per accedere a tali informazioni sui membri. Quindi ho bisogno di assicurarmi di avere effettivamente il _id. Ma io non sono. – Andy

+0

Sarei interessato a vedere perché no ... dovresti esserlo se stai usando 'onListItemClick' con la tua lista. – Barak

risposta

9

Dando per scontato che non si ha il Cursore come un membro della vostra Adapter:

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

Ahh, quindi chiamare getCursor ottiene il cursore associato utilizzato da CursorAdapter? Dovrei averlo capito !! Grazie – Andy

+0

Sì, ecco un riferimento per [getCursor()] (http://developer.android.com/reference/android/widget/CursorAdapter.html#getCursor%28%29) – Sam

+0

E se si utilizza CursorAdapter e non SimpleCursorAdapter allora dovresti impostare la posizione in newView come questa '@Override public Visualizza newView (Contesto contesto, Cursore cursor, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from (parent.getContext()); titolare.deleteImageView = (ImageView) retView.findViewById (R.id.delete); holder.deleteImageView.setTag (cursor.getPosition()); return retView; } ' – Chetna

4

ho nkow questo non risponde alla domanda posta, ma Sam preso cura di questo. Ho pensato di postare questo perché sembra esserci una certa confusione nella parte OP.

seguito viene illustrato un metodo onListItemClick da un'attività che contiene un elenco creato con un adattatore cursore personalizzato:

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

long id è l'ID di riga per i dati contenuti nella riga cliccato (quando l'elenco è alimentato da un adattatore del cursore). Non è necessario eseguire l'override di getItemId.

È necessario ignorare lo getItemId (nella mia esperienza) se si esegue qualcosa come inserire informazioni da righe diverse in una singola riga. Finché tutti i dati relativi a una riga elenco provengono dalla stessa riga del database, non è necessario risolvere il problema.

Suppongo che un'altra volta si potrebbe essere necessario utilizzare sarebbe se hai preso i dati da un cursore e metterlo in un array e poi utilizzato un adattatore serie .. ma che sembra abbastanza rotonda ...

+0

Bene, è la riga _id che voglio, almeno dal database. Ma vedo cosa stai dicendo – Andy

+0

Questo ** è ** l'id della riga (o _id se preferisci pensarlo in termini di nome della colonna del database). Ecco perché una colonna chiamata '_id' è * richiesta * in qualsiasi cursore che alimenta un adattatore ... il framework lo usa e lo passa lungo in modo da poterlo usare quando si fa clic su una linea. – Barak

+0

ahh. Gotcha. Grazie per l'input. Molto apprezzato. – Andy

Problemi correlati