在Fragment中OnActivityResult方法中接收Activity中返回的值
在Fragment中OnActivityResult方法中接收Activity中返回的值,有需要的朋友可以參考下。
在開發android中,有些人往往很疑惑,當一個FragmentActivity中有多個碎片
的時候,如a,b,c三個碎片,
其中b中進行了操作,跳轉到了新的界面D
(activity
)。但是當D操作完后,返回值到碎片b。那么問題就來了,肯定會有人問,b是一個碎片
,如何才能接收到D傳過來的值呢?
第一步:
我們要在父類的FragmentActivity中進行一步操作:
public class MyFragmentActivity extends FragmentActivity{ public FragmentTransaction mFragmentTransaction; public FragmentManager fragmentManager; public String curFragmentTag = ""; ... /*在fragment的管理類中,我們要實現這部操作,而他的主要作用是,當D這個activity回傳數據到 這里碎片管理器下面的fragnment中時,往往會經過這個管理器中的onActivityResult的方法。*/ protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); /*在這里,我們通過碎片管理器中的Tag,就是每個碎片的名稱,來獲取對應的fragment*/ Fragment f = fragmentManager.findFragmentByTag(curFragmentTag); /*然后在碎片中調用重寫的onActivityResult方法*/ f.onActivityResult(requestCode, resultCode, data); } ... }
第二步:比如,在c碎片中(fragment),我們要進行的操作:
A:對了,這里需要注意下:在實際開發中,往往會出現在子的fragment中,還會去管理下一層的多個碎片的管理,對於這種比較復雜的碎片管理傳值又需怎樣做呢?其實做法還是和上面一樣的
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Fragment f = fragmentManager.findFragmentByTag(curFragmentTag); f.onActivityResult(requestCode, resultCode, data); }
B:好的,終於進入主題了,到最終的b(fragment)接收傳過來的數據了。那我就直接上代碼了:
public class b extends Fragment{ *** @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 1: if (resultCode != Activity.RESULT_OK) { return; } break; default: break; } } *** }
好吧,講了這么多,雖說我的表達還是欠佳,但是,相信大家應該能了解如何傳值了吧,至於最后的activtiy中如何做,相必大伙都清楚。