如何从适配器中启动startActivityForResult并将结果返回给片段

9

我有几个带有自定义ListView的片段。它们使用我的自定义ListAdapter,我在其中处理列表元素的点击事件。我需要从此OnClickListener启动另一个活动,并将一些信息返回给片段。我尝试使用

Intent intent=new Intent(context, DataFillerActivity.class);  
((Activity) context).startActivityForResult(intent, 3);

但是DataFillerActivity将结果返回给MainActivity,而不是片段。 那么解决这个问题的最佳方法是什么?谢谢。
4个回答

9
请将 Main Activity 中的 onActivityResult 方法更改为以下内容:
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //super.onActivityResult(requestCode, resultCode, data);
        // Check if image is captured successfully

        super.onActivityResult(requestCode, resultCode, data);
        for (Fragment fragment : getSupportFragmentManager().getFragments()) {
            fragment.onActivityResult(requestCode, resultCode, data);
        }
    }

它将结果代码传递给其子片段。

5

如Steve所说,fragment应该是模块化的。然而,这意味着通信不应该通过任何活动进行,而应该留在fragment内部。

为了解决这个问题,请确保您的ListAdapter引用了该fragment,并使用fragment.startActivityForResult()。然后结果将回到fragment的onActivityResult()中。


尝试过但未能正常工作,不确定是否与https://dev59.com/I3XYa4cB1Zd3GeqP98Je相关的错误有关。但如果我从我的片段中调用另一个活动,则可以正常工作。只有当在片段的ListView中调用startActivityForResult时,片段的onActivityResult会在预期的活动启动后立即被调用。 - TPG
在调用fragment.startActivityForResult(intent, 0)之前,我移除了intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)并解决了我的问题。为你点赞。 - TPG

3

2

只需在您的Activity类中覆盖onActivityResult方法,并从Activity传递结果到Fragment,您可以通过id或标记找到Fragment。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接