如何将所选项目的ID从ListView传递到Android中的AlertDialog?

时间:2009-07-20 06:26:25

标签: android

这是场景:我有一个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存储到我的活动字段中。我已经做到了,而且它有效。但它也很难看。它引入的有状态让我感到不安。有没有其他人看到传递此类信息的更好方法,而不是在活动中使用字段?

3 个答案:

答案 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)。