如何从一个Activity返回到一个片段?

时间:2016-06-14 13:16:31

标签: android android-fragments

我有一个主要活动,扩展到 AppCompatActivity ,其中包含 FrameLayout ,我曾经用欲望的片段替换它。

然而,有一段时间,我打电话给另一个活动只是为了显示一些特定信息,并且需要将该信息传回主要活动,并显示最后一个片段。因此,我尝试使用FragmentManager,而片段显示透明;另外,如果我使用它,我将失去主要活动的FrameLayout id。

为了澄清,我将提出一个计划:

Scheme

是否可以使用onBackPressed来解决它?

更新

下面是我的onActivityResult,它调用 startActivityForResult ,它在片段中使用。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 2) {
        if (resultCode == Activity.RESULT_OK) {

            execusaoVistoria.fotos = allFotos;

            Intent startPreview = new Intent(getContext(), PreviewActivity.class);
            startPreview.putExtra("path", fileName.toString());
            startPreview.putExtra("ExecusaoVistoria", execusaoVistoria);
            startActivityForResult(startPreview, 10);

        }
    } else if (requestCode == 10) {

        if (resultCode == Activity.RESULT_OK) {

            allFotos.add((Fotos) data.getBundleExtra("Bundle").getParcelable("foto"));

        }
    }

}

这里是来自Activity的代码调用setResult:

Intent i = new Intent();
i.putExtra("Bundle", bundle);
setResult(Activity.RESULT_OK, i);
finish();

3 个答案:

答案 0 :(得分:4)

您应该使用startActivityForResult而不是startActivity。

在您的MainActivity中,您将收到回电

onActivityResult()

在这里,您可以获取所需的信息。

How to manage `startActivityForResult` on Android?

答案 1 :(得分:0)

根据您希望通过它实现的目标,您可以做两种解决方案。您可以在片段中使用startActivityForResult打开第二个活动,并在片段的onActivityResult方法中处理结果。

第二种是使用相同的活动方法处理活动内部的结果。

在这两种情况下,您要做的就是致电startActivityForResult(yourIntent, yourRequestCode)打开请求的活动。在已打开的活动中,当您完成并获得结果后,您必须致电

Intent resultIntent = new Intent();
//in case you do not need to pass data back you can skip this
resultIntent.setExtra("extra_result", extraData);
setResult(resultCode,yourResultIntent);
finish();

当这返回上一个活动时,将使用您在启动活动时指定的请求代码和调用onActivityResult(resultCode,requestCode)时设置的结果代码调用setResult方法。

为了处理片段内的结果,您需要覆盖Activity中的onActivityResult方法并调用super.onActivityResult并覆盖片段内的方法。在这种情况下,您将在那里处理结果。

您需要注意的是调用结果的实际处理程序的startActivityForResult

如果您想查看基本互动的完整示例,可以在https://developer.android.com/training/basics/intents/result.html

进行检查

答案 2 :(得分:0)

尝试使用片段中的意图作为 Intent i = new Intent(getActivity(),anotherActivity.class); startActivityForResult(ⅰ);

并且对于后退流程,将父活动声明为清单中的主要活动。