2010-08-22 4 views
1

J'ai une ListActivity avec une liste de noms (Jacob, Will, Matt, etc.). J'ai un contextMenu qui donne à l'utilisateur la possibilité d'éditer ou de supprimer la personne. Je sais comment trouver l'identifiant pour exécuter la fonctionnalité d'édition et de suppression, mais je n'arrive pas à comprendre comment ajouter le nom de la personne aux extras d'intention ou ajouter un toast lors d'une suppression.Comment obtenir le texte d'un menu contextuel?

Voici un extrait de code que j'utilise pour le menu contextuel:


@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 

    switch(item.getItemId()) { 
    case DELETE_ID: 
     mDbHelper.deletePerson(info.id); 
     fillData(); 
     return true; 
    case EDIT_ID: 
     Cursor c = mCursor; 
     c.moveToPosition(info.position); 
     Intent i = new Intent(this, PersonEdit.class); 
     i.putExtra("_id", info.id); 
     startActivityForResult(i, ACTIVITY_EDIT); 
     return true; 
    } 
    return super.onContextItemSelected(item); 
} 

Répondre

0

Merci Macarse. Je suis tombé d'une manière ou d'une autre sur la réponse à ma propre question. Il semble fonctionner correctement.


@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 

    Cursor c = mCursor; 
    c.moveToPosition(info.position); 
    Long id = info.id; 
    String person = mCursor.getString(c.getColumnIndexOrThrow("person")); 

    switch(item.getItemId()) { 
    case DELETE_ID: 
     Toast.makeText(People.this, person + " has been deleted.", Toast.LENGTH_SHORT).show(); 
     mDbHelper.deletePerson(id); 
     fillData(); 
     return true; 
    case EDIT_ID: 
     Intent i = new Intent(this, PersonEdit.class); 
     i.putExtra("_id", id); 
     i.putExtra("person", person); 
     startActivityForResult(i, ACTIVITY_EDIT); 
     return true; 
    } 
    return super.onContextItemSelected(item); 
} 
0

Copier coller de mon code:

AdapterView.AdapterContextMenuInfo info; 

try { 
    info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); 
} catch (ClassCastException e) { 
    Log.e(TAG, "bad menuInfo", e); 
    // Do something here. 
} 

Person person = (Person) getListAdapter().getItem(info.position); 

getListAdapter() est pour les activités qui s'étend de ListActivity. Si vous ne l'utilisez pas, obtenez le ListView et ensuite l'adaptateur.

+0

Merci pour la réponse rapide. Il me manque encore quelque chose. Je remplis l'adaptateur de liste avec une requête SQLite. Je n'ai pas d'objet personne à instancier. Les premières lignes de ma fonctionnalité EDIT_ID montrent ma tentative d'obtenir le nom de la personne à partir de la base de données SQLite. Je sais que je manque un peu. – alockrem

Questions connexes