【问题标题】:need for onActivityResult() when result is already obtained by onListItemClick()onListItemClick() 已经获得结果时需要 onActivityResult()
【发布时间】:2010-07-06 06:21:29
【问题描述】:

我有一个扩展 Activity 的主类,它应该产生一个 ListActivity 并获得所做的选择。 所以我在扩展 ListActivity 的类中有一个 onListItemClick(),它通过 getItemAtPosition 接受选择。

这个 ListActivity 是由 startActivityForResult 启动的。

现在,既然我已经在onListItemClick中得到了结果,为什么还要onActivityResult()??它有什么作用?

意图从何而来?

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    如果要将列表中的选择结果返回到 MainActivity,则您正在使用 startActivity 作为结果。结果的 StartActivity 使您能够将从列表中选择的值传递回主 Activity。

    在 onListItemClick 中处理该值的那一刻,该值只有您生成的 ListActivity 知道。要将其传回,您可以像这样使用setResult(int, Intent)

    Intent resultIntent = new Intent;
    resultIntent.putExtra(CONSTANT_FOR_RESULT, selection);
    setResult(CONSTANT_FOR_SUCCESS, resultIntent)
    finish();
    

    这将使您的应用返回到第一个活动,并如android documentation 中所述的 onActivityResult 将被调用。现在您可以从意图中提取选择并将其用于您的主要活动。

    如果您想将在 Activity B 中所做的选择传递回 Activity A,则仅需要此机制。

    【讨论】:

    • 谢谢。如何使字段可以跨包访问?目前,即使它们被声明为 public,我也无法访问同一包中另一个类的字段。
    • 你给的代码sn-p,应该放在哪里?在活动 B 但在哪里?
    • 得到选择结果后。我不知道那可能是 OnListItemClicked 方法。
    • 当您有一个列表活动并且在 onListItemClick() 中您需要获取所选项目然后将其与各种选项进行匹配时,有效的方法是什么?不能使用 switch case,因为我想匹配字符串。一个很长的 if-else if 阶梯是唯一的方法吗?
    • 我建议在此页面上提出更多问题作为新问题。如果您在 cmets 中发布有关此问题的链接,我将查看新问题。
    猜你喜欢
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    相关资源
    最近更新 更多