【问题标题】:How to handle onActivityResult in a custom dialog class如何在自定义对话框类中处理 onActivityResult
【发布时间】:2017-04-30 09:09:33
【问题描述】:

我正在尝试创建一个继承自 Dialog 的自定义对话框类,该类将允许用户选择联系人。我可以通过以下方式让联系人选择显示得很好:

this.getOwnerActivity().startActivityForResult(...);

问题是当用户选择一个联系人时,它会在对话框的父活动上调用 onActivityResult();我想把activity结果的处理封装在对话框类中,而不是父activity中。

This chap asked the same question,但没有收到可行的答案:

inside Android Dialog, how to setup onActivityResult for startActivityForResult?

这可能吗?似乎是一件非常基本的事情,所以我认为有办法。

我可以将对话框转换为一个全新的活动,但对话框在应用程序的上下文中工作得非常好,所以我宁愿不必求助于它。

【问题讨论】:

    标签: java android


    【解决方案1】:

    对话框对其活动是次要的。当您使用startActivityForResult() 启动活动时,您的对话框将被关闭(并且您的活动可能会被回收)。所以当你返回YourActivity.onActivityResult()时,对话框没有激活,实际上原来的对话框对象已经不存在了。您可以再次实例化对话框,显示它,将必要的数据传递给它,并让它做一些事情,但这似乎是一个非常糟糕的设计。相反,在活动中处理您的结果并打开一个对话框与用户交流。

    【讨论】:

    • 我理解你的意思,但是如果父活动处理构建对话框和处理活动结果,我的整个过程工作得很好;用户交互完全一样:对话框打开,用户选择“选择联系人”,显示联系人选择器,用户
    • 抱歉,这很奇怪,丢失了我的部分评论。如果父活动处理构建对话框,通过 startActivityForResult() 启动联系人选择器并处理活动结果,我的整个过程工作得很好;用户交互与我上面询问的内容完全相同:显示对话框,用户选择“选择联系人”,显示联系人选择器,用户选择联系人,对话框更新为新联系人。我只是想把它封装在一个自定义对话框类中,而不是让父活动处理所有事情。
    • 我明白了。不过,我坚持我的回答:当您打开联系人选择器时,您的对话框将被关闭并被 GC 处理。返回第一个活动后,它需要显示包含新联系人详细信息的相同对话框。我只是认为没有其他方法。
    • 好的,不确定细节,但我确信在这一点上将其封装在 Dialog 类中是不可能的(这很不幸),所以我继续接受你的回答。跨度>
    • 如果唯一的方法是重新实例化对话框,那真的是“糟糕的设计”吗?我正在做与此类似的事情,但不是选择联系人,而是允许用户选择媒体文件。我在对话框中还有一些用户还需要设置的“设置”。使用 Activity 而不是 Dialog 会更好吗?即使类设计变得混乱,对话框对我来说似乎是一个更好的用户体验选择:/
    【解决方案2】:

    您可以使用DialogFragment 代替对话框。 @BlackRider 已经回答该对话框对其活动是次要的。当您使用 startActivityForResult() 启动活动时,您的对话框将被关闭

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多