2012-07-26 19 views
6

Quiero obtener el registro actual de un cursor, en lugar de solo el ID, para poder manipular un menú contextual.Cómo obtener datos de Cursor en ContextMenu

vi este ejemplo here que muestra cómo obtener el ID:

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case DELETE_ID: 
     AdapterView.AdapterContextMenuInfo info= 
      (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 

     delete(info.id); 
     return(true); 
    } 

    return(super.onOptionsItemSelected(item)); 
    } 

Esto es muy bueno ya que me permite obtener el identificador de base de datos SQLite apropiada del menú contextual de clic que permitirá que escriba una función para hacer una búsqueda. Pero seguramente puedo reutilizar el cursor actual?

He intentado hacer esto:

Cursor c = (Cursor) this.getListAdapter().getItem((int) info.id); 
String itemPriority = c.getInt(1); 
Log.v(TAG, "Current item:" + itemPriority); 

pero la línea del cursor parece devolver sólo el esquema de la base de datos en lugar del registro que busco.

Podría alguien por favor arrojar algo de luz.

EDITAR: Gracias a @azgolfer he encontrado la solución. Utilizo un método fillData() para rellenar el adaptador. Normalmente esto se declara sin variables. Tuve que redefinir este método con una variable de campo. La parte pertinente del código para hacer el adaptador curstor visible en onContextItemSelected está aquí:

private void fillData() { 
    Cursor itemsCursor = mDbHelper.fetchAllItemsFilter(mListId, mStatusFilter); 
    startManagingCursor(itemsCursor); 
    mItemAdaptor = new ItemAdapter(this, itemsCursor); 
    this.setListAdapter(mItemAdaptor);  
} 
+0

¿Qué quiere decir por la reutilización? Y 'c.getInt (1)' obtiene lo que sea el índice 1 de esa fila de cursor. Así que solo obtenga los registros de los otros índices de esa fila de cursores, como 'c.getString (2)'. A menos que estés tratando de hacer otra cosa. – Andy

+0

Lo siento, creo que la reutilización del trabajo debe ser "uso". El punto es que el cursor no devuelve datos, solo el esquema. –

+0

¿Podría imprimir lo que se muestra en 'itemPriority'? – Andy

Respuesta

13

Está utilizando un CursorAdapter para mostrar los elementos de lista, ¿verdad? Entonces ya tiene acceso al cursor llamando a getCursor() en el CursorAdapter mismo. Para recuperar el registro correcto del cursor, solo necesita obtener la posición del elemento que el usuario ha presionado, luego mover el cursor a esa posición y recuperar sus datos.

En primer lugar, determinar la posición de lo que el usuario pulsa:

AdapterView.AdapterContextMenuInfo info= 
     (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 
int itemPosition = info.position; 

continuación, mueva el cursor a la posición deseada y recuperar el registro:

Cursor cursor = (Your cursorAdapter).getCursor(); 
cursor.moveToPosition(itemPosition); 
String itemPriority = cursor.getInt(1); 
Log.v(TAG, "Current item:" + itemPriority); 
+0

Su respuesta me ayudó a encontrar la solución. El problema fue que no sabía que podía declarar el Adaptador como una variable de campo. He actualizado mi pregunta original para incluir dónde defino el adaptador. –

+0

¡Muy útil azgolfer, gracias muchísimo! – Soham

Cuestiones relacionadas