Comment implémenter un menu contextuel déclenché par un clic long ou un appui sur une ListActivity utilisant les dispositions intégrées et un ListAdapter?
Réponses
Trop de publicités?Sur la méthode onCreate appel registerForContextMenu comme ceci:
registerForContextMenu(getListView());
et ensuite remplir le menu sur onCreateContextMenu(ContextMenu menu Affichage, ContextMenuInfo menuInfo). Le menuInfo argument peut fournir des renseignements au sujet de l'article qui a été long-cliqué sur l'icône de cette façon:
AdapterView.AdapterContextMenuInfo info;
try {
info = (AdapterView.AdapterContextMenuInfo) menuInfo;
} catch (ClassCastException e) {
Log.e(TAG, "bad menuInfo", e);
return;
}
long id = getListAdapter().getItemId(info.position);
et vous pouvez ajouter des éléments de menu dans la manière habituelle d'appeler le menu.ajouter:
menu.add(0, MENU_ITEM_ID, 0, R.string.menu_string);
et lorsque l'utilisateur choisit une option, onContextItemSelected est appelé. Aussi onMenuItemSelected et de ce fait n'est pas explicitement expliqué dans la documentation, sauf à dire que vous utilisez l'autre méthode permettant de recevoir les appels à partir du menu contextuel; il faut simplement être conscient, ne partagent pas les identifiants.
Sur onContextItemSelected vous pouvez obtenir ahold de la MenuInfo et donc l'id de l'élément sélectionné par l'appel de getMenuInfo():
try {
info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
} catch (ClassCastException e) {
Log.e(TAG, "bad menuInfo", e);
return false;
}
long id = getListAdapter().getItemId(info.position);
Vous devez également consulter Activity.registerForContextMenu (View) .
listView = (ListView) findViewById(R.id.listpockets);
registerForContextMenu(listView);
public void onCreateContextMenu(android.view.ContextMenu menu, View v, android.view.ContextMenu.ContextMenuInfo menuInfo) {
//AdapterContextMenuInfo info = (AdapterContextMenuInfo)menuInfo;
menu.setHeaderTitle(getString(R.string.titleDelete));
menu.add(0, CommonUtil.CONTEXT_MENU__DELETE_ID, 0, getString(R.string.menuDelete));
};
@Override
public boolean onContextItemSelected(MenuItem item) {
if(item.getItemId() == CommonUtil.CONTEXT_MENU__DELETE_ID)
{
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
long id = this.listView.getItemIdAtPosition(info.position);
Log.d(TAG, "Item ID at POSITION:"+id);
}
else
{
return false;
}
return true;
}