如何从适配器 startActivityForResult 以将结果返回给 Fragment

Posted

技术标签:

【中文标题】如何从适配器 startActivityForResult 以将结果返回给 Fragment【英文标题】:How to startActivityForResult from Adapter to get result back to Fragment 【发布时间】:2013-03-20 10:51:01 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

像这样在 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);
        
    

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

【讨论】:

【参考方案2】:

正如史蒂夫所写,片段应该是模块化的。但是,这意味着通信应该通过任何活动,而应留在片段内。

要解决此问题,请确保您的 ListAdapter 具有对片段的引用并使用 fragment.startActivityForResult()。然后结果会回到fragment的onActivityResult()

【讨论】:

试过但没用,不确定是不是与***.com/questions/18271761/…相关的错误。但是,如果我从我的片段中调用另一个活动,它确实有效。只有在片段的 ListView 中调用 startActivityForResult 时,片段的 onActivityResult 才会在预期的活动开始后立即被调用。 我在删除 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 后解决了我的问题在调用 fragment.startActivityForResult(intent, 0); 之前为你 +1。【参考方案3】:

要更新您的片段,唯一的方法应该是在活动上。那是因为 Fragment 被设计成模块化的。

http://developer.android.com/training/basics/fragments/communicating.html

如果你为结果启动一个Acitivity,结果将被传递给启动请求的Activity。现在您可以将数据传递给您想要的 Fragment。

【讨论】:

【参考方案4】:

只需覆盖 Activity 类中的 onActivityresult 并将结果传递给来自 Activity 的片段,您可以找到片段,但 id 是您的标签

【讨论】:

以上是关于如何从适配器 startActivityForResult 以将结果返回给 Fragment的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数

如何从适配器访问 ListView

如何从适配器知道 ListView 的项目是不是可见?

如何从片段适配器启动活动

如何从 MFP 8.0 中的 java 适配器异步调用 javascript 适配器?

如何使用从适配器传递的 url 下载图像