2009-07-20 6 views
2

Voici le scénario: J'ai une ListActivity, et un appui long sur un élément ouvre un menu contextuel. Un élément dans le menu contextuel est "supprimer", et cela ouvre une boîte de confirmation (et AlertDialog). Lorsque l'utilisateur appuie sur OK dans la boîte de dialogue de confirmation, j'ai besoin de connaître l'identifiant de l'élément sélectionné à l'origine, afin de pouvoir le supprimer.Comment puis-je transmettre l'ID de l'élément sélectionné d'un ListView à un AlertDialog sous Android?

Le flux ressemble à ceci:

 

     This event:    Causes Android to call: 
----------------------------------------------------- 
Long press an item  -> onCreateContextMenu() 
Select context menu item -> onContextItemSelected() 
call showDialog()   -> onPrepareDialog() 
user clicks OK   -> onClick() 

Dans onCreateContextMenu et onContextMenuSelected, je peux obtenir à l'id de l'élément sélectionné de la ContextMenuInfo. Dans onPrepareDialog, cependant, je n'ai plus accès à cette information. Le problème est que onPrepareDialog a besoin de ces informations pour configurer un écouteur onClick sur son bouton POSITIVE.

Je sais que, lors d'onContextMenuSelected, je peux stocker l'ID de l'élément sélectionné dans un champ de mon activité. J'ai fait cela, et cela fonctionne. Mais c'est aussi vraiment moche. L'état d'état qu'il introduit me rend mal à l'aise. Est-ce que quelqu'un d'autre a vu un meilleur moyen de transmettre de telles informations que d'utiliser des champs dans l'activité?

Répondre

0

Je vois que, dans Android 2.2 (niveau API 8), ils ont ajouté une surcharge showDialog qui prend un paquet. Il semble que vous puissiez utiliser l'ID de l'élément sélectionné dans cet ensemble, qui est alors accessible en onPrepareDialog. Ceci est exactement ce que je cherchais. Malheureusement, mon appareil est bloqué sur 1.6 (niveau d'API 4).

1

Étant donné que vous n'avez qu'un utilisateur qui ne peut effectuer qu'une longue pression de touche à la fois sur votre application (si j'ai bien compris la documentation), pourquoi stocker l'identifiant dans un domaine qui vous est propre? Cela ressemble à une façon parfaitement raisonnable de le faire.

+0

D'accord ... c'est moche, mais ça va marcher. –

+0

Cela me force à faire des suppositions sur la façon dont Android va faire appel à mon activité. Je pense que l'ordre que j'ai décrit dans ma question est correct, mais j'ai peut-être manqué quelques nuances, et cela pourrait changer à l'avenir au gré de Google. L'écriture de code sans état est préférable à l'écriture de code très dynamique. –

0

Vous pouvez envisager de stocker les informations dans les préférences. Ils sont un bon moyen de stocker plus d'informations persistantes. En vérifiant ce que dans les préférences de votre onCreate/onResume/onRestart vous pouvez déterminer où reprendre votre application.

http://developer.android.com/guide/topics/data/data-storage.html

+0

J'ai seulement besoin de stocker ces informations pendant environ 2 secondes (entre lorsque l'utilisateur appuie sur Supprimer et quand il appuie sur OK). Les préférences semblent meilleures pour le stockage à long terme. –

Questions connexes