2010-05-06 13 views
3

J'ai une vue qui prolonge l'activité. Un ListView affichera un certain nombre de listitems. Lorsque l'utilisateur clique longuement je voudrais les présenter avec un menu contextuel leur permettant de sélectionner éditer, supprimer etc ... puis d'identifier le listitem qui a été sélectionné comme élément sur lequel effectuer l'action.id identifiant de listitem pour contextmenu

En onCreate je:

listView.setAdapter(adapter); 
listView.setOnItemClickListener(onListClick); 
listView.setOnItemLongClickListener(onListLongClick); 
registerForContextMenu(listView); 

J'ai une méthode onCreateContextMenu

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
ContextMenuInfo menuInfo) { 
super.onCreateContextMenu(menu, v, menuInfo); 
    menu.setHeaderTitle("Context Menu"); 
    menu.add(0, v.getId(), 0, "Edit"); 
    menu.add(0, v.getId(), 0, "Delete"); 

} 

et aussi onContextItemSelected

@Override 
public boolean onContextItemSelected(MenuItem item) { 

    if (item.getTitle() == "Edit") { 
     // edit action 
    } else if (item.getTitle() == "Delete") { 
     // delete action 
    } else { 
     return false; 
    } 
    return true; 
} 

Je ne sais pas où aller d'ici pour obtenir le ligne correcte/listitem.

Répondre

5

Vous pouvez utiliser AdapterContextMenuInfo s'il vous plaît se référer Link-1 à partir du code que vous avez fourni,

public boolean onContextItemSelected(MenuItem item) { 

    if (item.getTitle() == "Edit") { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
     editInfo(info.position); 
    } else if (item.getTitle() == "Delete") { 
     // TODO Delete action 
    } else { 
     return false; 
    } 

    return true; 
} 
+0

Grande qui fonctionne, mais il semble être compensé par un si au lieu de info.position je suis d'avoir à passer (info.position + 1). Est-ce que ce comportement est attendu? – JDM