2009-07-20 34 views
2

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

回答

0

我看到的是,在的Android 2.2(API级别8),它们加入的过载到showDialog采用一个束。看起来您可以使用将所选项目的ID放入该捆绑包中,然后在onPrepareDialog中进行访问。这正是我所期待的。不幸的是,我的设备卡住了1.6(API级别4)。

1

由于您只有一个用户在应用程序中一次只能做一个长按键(如果我理解了文档的权利),为什么要将id存储在您自己的字段中是不好的?听起来像是一个完全合理的方式来做到这一点。

+0

同意...这很丑,但它会工作。 – 2009-07-20 11:08:25

+0

它迫使我对Android将如何调用我的活动做出假设。我认为我在我的问题中列出的顺序是正确的,但我可能错过了一些细微差别,并且未来谷歌可能会改变它。编写无状态代码比编写非常有状态的代码更可取。 – 2009-07-20 13:39:31

相关问题