这是场景:我有一个ListActivity,长按一个项目会打开一个上下文菜单。上下文菜单中的一个项目是“删除”,它会弹出一个确认框(和AlertDialog)。当用户在确认对话框中按OK时,我需要知道最初选择的项目的ID,以便我可以实际删除它。
流程如下:
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存储到我的活动字段中。我已经做到了,而且它有效。但它也很难看。它引入的有状态让我感到不安。有没有其他人看到传递此类信息的更好方法,而不是在活动中使用字段?
答案 0 :(得分:1)
由于您只有一个用户只能在您的应用程序中一次创建一个长按键(如果我理解文档正确),为什么将id存储在您自己的字段中会很糟糕?听起来像是一种非常合理的方式。
答案 1 :(得分:0)
您可能需要考虑将信息存储在“首选项”中。它们是存储更多持久性信息的好方法。通过检查onCreate / onResume / onRestart的首选项中的内容,您可以找出恢复申请的位置。
http://developer.android.com/guide/topics/data/data-storage.html
答案 2 :(得分:0)
我看到,在Android 2.2(API级别8)中,他们为showDialog
添加了一个带有包的重载。看起来您可以使用将所选项目的ID放入该捆绑包中,然后可以在onPrepareDialog
中访问该ID。这正是我所寻找的。不幸的是,我的设备停留在1.6(API级别4)。