2016-06-14 39 views
1

我有一个主要活动,扩展到AppCompatActivity,它包含一个FrameLayout,我用它来替换它所需的片段。如何从一个Activity返回到一个片段?

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

,试图澄清,我将提出一个方案:

Scheme

可以使用onBackPressed解决呢?

UPDATE

下面是我的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")); 

     } 
    } 

} 

这里,是从调用的setResult活动代码:

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

回答

4

您应该使用,而不是startActivity startActivityForResult。

在您的MainActivity您将收到一个回调

onActivityResult() 

在这里你可以获取你所需要的信息。

How to manage `startActivityForResult` on Android?

+0

它通过使用您的提示工作。但是,当我完成其他活动时,我需要找到一种方法在OnCreate上获取结果。 – Tarcisiofl

+0

当您返回活动时,OnCreate不会被调用。你把逻辑是onResume()可能是 –

0

有2个解决方案,您可以根据您想达到该怎么做。您可以从片段中打开第二个活动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

+0

谢谢Krzysztof!在onActivityResult中,我有2个requestCode,每个都执行你自己的操作。但是,它似乎不会每次都去特定的requestCode。有时,没有任何反应! – Tarcisiofl

+0

你可以发布你调用'startActivityForResult'的代码和调用setResult的代码吗? –

+0

当然,我会用这个更新这个问题。 – Tarcisiofl

0

检查尝试在片段使用意向作为 意向书I =新意图(getActivity(),anotherActivity.class); startActivityForResult(i);

对于后台进程,将父级活动声明为清单中的主要活动。

相关问题