这里是场景:我有一个ListActivity,长按一个项目会弹出一个上下文菜单。上下文菜单中的一个项目是“删除”,并显示一个确认框(和AlertDialog)。当用户在确认对话框中按OK时,我需要知道最初选择的项目的ID,以便我实际上可以删除它。如何将所选项目的ID从ListView传递到Android中的AlertDialog?
流程是这样的:
This event: Causes Android to call: ----------------------------------------------------- Long press an item -> onCreateContextMenu() Select context menu item -> onContextItemSelected() call showDialog() -> onPrepareDialog() user clicks OK -> onClick()
在onCreateContextMenu和onContextMenuSelected,我可以从ContextMenuInfo所选项目的id来获取。但是,在onPrepareDialog中,我不再有权访问该信息。问题是onPrepareDialog需要这些信息来在其POSITIVE按钮上设置一个onClick监听器。
我知道,在onContextMenuSelected过程中,我可以将选定项目的ID存储到我的活动字段中。我已经做到了,而且很有效。但它也很难看。它引入的有状态让我感到不安。有没有其他人看到更好的方式来传递这些信息,而不是在活动中使用字段?
同意...这很丑,但它会工作。 – 2009-07-20 11:08:25
它迫使我对Android将如何调用我的活动做出假设。我认为我在我的问题中列出的顺序是正确的,但我可能错过了一些细微差别,并且未来谷歌可能会改变它。编写无状态代码比编写非常有状态的代码更可取。 – 2009-07-20 13:39:31