代码之家  ›  专栏  ›  技术社区  ›  Daniel Yankowsky

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

  •  2
  • Daniel Yankowsky  · 技术社区  · 16 年前

    这里有一个场景:我有一个listactivity,长时间按一个项目会弹出一个上下文菜单。上下文菜单中的一项是“删除”,它会显示一个确认框(和警报对话框)。当用户在确认对话框中按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需要这些信息来在其积极按钮上设置onclick监听器。

    我知道,在OnContextMenuSelected期间,我可以将所选项目的ID存储到我的活动字段中。我已经做到了,而且效果很好。但它也很难看。它所引入的庄严使我感到不安。有没有其他人看到比在活动中使用字段更好地传递此类信息的方法?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Hannes Ovrén    16 年前

    由于您的应用程序中只有一个用户一次只能进行一次长按键(如果我理解文档的正确性),为什么在您自己的字段中存储ID会很糟糕?听起来是一个非常合理的方法。

        2
  •  0
  •   Will Ganeshgm7    16 年前

    您可能需要考虑将信息存储在首选项中。它们是存储更持久信息的好方法。通过检查oncreate/on resume/onrestart上的首选项中的内容,您可以找到恢复应用程序的位置。

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

        3
  •  0
  •   Daniel Yankowsky    15 年前

    我看到了,在Android2.2(API级别8)中,他们添加了一个超负荷 showDialog 那需要一个包裹。您似乎可以使用将所选项目的ID放入该包中,然后在 onPrepareDialog . 这正是我要找的。不幸的是,我的设备卡在1.6(API级别4)上。