J'essaie d'utiliser un ContextMenu.
Je l'ai fait avec succès pour une simple ListActivity en utilisant SimpleCursorAdapter.
Passant Je veux remplacer SimpleCursorAdapter avec CursorAdapter mais conservent encore le comportement ContextMenu, donc j'ai ajouté les deux fonctions de remplacement obligatoires Bindview et NewViewOnCreateContextMenu est invoqué avec une valeur null pour ContextMenuInfo
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = mLayoutInflater.inflate(R.layout.check_row, parent, false);
registerForContextMenu(view);
return view;
}
Notez le registerForContextMenu qui remplace le registerForContextMenu (getListView()) dans la méthode onCreate de ListActivity. J'ai trouvé cela nécessaire pour obtenir un appel à onCreateContextMenu (...)
Tout cela fonctionne (lignes créées avec les widgets attendus, callbacks sur leur fonctionnement etc etc). Tout cela sauf que le paramètre ContextMenuInfo fourni à onCreateContextMenu (...) est maintenant nul - ce qui m'empêche d'accéder à rowId.
Existe-t-il une autre astuce à effectuer - peut-être dans la méthode bindView (...) du CursorAdapter?
Je veux mettre registerForContextMenu() dans onCreate() mais cela entraîne des entrées de liste ne répondant pas aux longs clics - donc il n'y a pas d'appel à onCreateContextMenu() et donc pas de menus contextuels. La mise en place du registre newView() entraîne un rappel de onCreateContextMenu() - mais le paramètre ContextMenuInfo est maintenant nul. Cependant - avoir le registre dans newView() et onCreate() fonctionne de la même manière que onCreateContextMenu() est appelé avec une entrée valide dans ContextMenuInfo. Je ne crois pas que ce soit «juste», il doit y avoir un meilleur moyen? –
"Je veux mettre registerForContextMenu() dans onCreate() mais en faisant cela, les entrées de la liste ne répondent pas aux longs clics - donc il n'y a pas d'appel à onCreateContextMenu() et donc pas de menus contextuels." Consultez http://github.com/commonsguy/cw-android/tree/master/Database/Constants/ pour un exemple de ListView et registerForContextMenu(). – CommonsWare
Merci. J'ai pris cet échantillon et j'ai essayé de recréer mon problème ici plutôt que dans mon propre code - et aha! Modifiez row.xml pour que CheckBox et ContextMenus ne soient plus disponibles. Vous n'avez besoin d'aucune logique pour gérer CheckBox, ajoutez simplement ce qui suit à la fin de la ligne.xml –