2016-06-14 37 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);

對於後臺進程,將父級活動聲明爲清單中的主要活動。

相關問題