39 votes

Comment implémentez-vous le menu contextuel dans une ListActivity sur Android?

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?

74voto

Pablo Points 44881

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);

14voto

Romain Guy Points 57114

Vous devez également consulter Activity.registerForContextMenu (View) .

5voto

Dhiral Pandya Points 1987
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;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X