2012-06-05 48 views
5

Me estoy haciendo esta pregunta debido a otra respuesta aquí, pero no explicó cómo hacer lo que estoy pidiendo How to get the id of the row in onItemClick(ListView) when using a custom Adapter?Cómo anular el método getItemId (int pos) de CursorAdapter?

La respuesta que fue aceptada en esa pregunta es lo que necesito ya que también estoy haciendo mi propio adaptador personalizado (CursorAdapter), por lo tanto tendré el mismo problema. El problema es que no tengo idea de cómo lograr eso. Estoy mirando el Doc, y no estoy seguro de cómo acceder a la columna _id desde un cursor. Como el Doc no tiene la constante de la que podemos obtener esa información, estoy atascado. Cualquier ayuda para descubrirlo sería muy apreciada.

EDITAR: No tenía claro cuál era mi pregunta, pero solo para aclarar, como el título, ¿cómo puedo anular el método getItemId() en la clase personalizada de CursorAdapter que creé?

+0

Pongo No entiendo tu problema ... Tengo varios adaptadores de cursor personalizados, nunca tuve que anular eso y obtengo la identificación de la fila del cursor bien ... ¿Qué tratas de hacer y dónde tratas de conseguir? esa identificación? – Barak

+0

Cuando hago clic en un miembro de la vista de lista, deseo poder acceder a la base de datos y usar esa ID para acceder a la información de los miembros. Así que necesito asegurarme de obtener el _id. Pero no lo soy. – Andy

+0

Me interesaría ver por qué no ... deberías hacerlo si estás usando 'onListItemClick' con tu lista. – Barak

Respuesta

9

Suponiendo que usted no tiene el cursor como un miembro de su adaptador:

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

Ahh, ¿así que al llamar a getCursor se obtiene el cursor asociado que usa CursorAdapter? Debería haberse dado cuenta de eso !! Gracias – Andy

+0

Sí, aquí hay una referencia para [getCursor()] (http://developer.android.com/reference/android/widget/CursorAdapter.html#getCursor%28%29) – Sam

+0

Y si está usando CursorAdapter y no SimpleCursorAdapter entonces debería establecer la posición en newView como esta '@Override public View newView (contexto contextual, cursor del cursor, padre de ViewGroup) { LayoutInflater inflater = LayoutInflater.from (parent.getContext()); titular.deleteImageView = (ImageView) retView.findViewById (R.id.delete); holder.deleteImageView.setTag (cursor.getPosition()); return retView; } ' – Chetna

4

I nkow esto no responde a la pregunta planteada, pero Sam se encargó de eso. Pensé en publicar esto porque parece haber cierta confusión en la parte de PO.

siguiente es un método onListItemClick de una actividad que contiene una lista creada con un adaptador de encargo del cursor:

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

long id es el ID de fila para los datos contenidos en la fila pulsada (cuando la lista es alimentado por un adaptador de cursor). No es necesario anular getItemId.

Solo tiene que anular getItemId (en mi experiencia) si hace algo así como poner información de diferentes filas en una sola línea. Siempre que todos sus datos para una línea de la lista provengan de la misma fila en la base de datos, no hay necesidad de resolver ese problema.

supongo que otra vez puede que tenga que utilizar sería si se toma datos de un cursor y ponerlo en una matriz y luego se usa un adaptador de serie .. pero que parece bastante rotonda ...

+0

Bueno, es la fila _id que quiero, al menos de la base de datos. Pero veo lo que dices – Andy

+0

Ese ** es ** el id de la fila (o _id si prefieres pensarlo en términos del nombre de la columna de la base de datos). Es por eso que una columna llamada '_id' es * requerida * en cualquier cursor que alimenta un adaptador ... el marco lo usa y lo transfiere para que pueda usarlo cuando hace clic en una línea. – Barak

+0

ahh. gotcha. Gracias por el aporte. Muy apreciado. – Andy

Cuestiones relacionadas