1、Activity <---> Fragment Activity一般先傳遞給FragmentActivity,通過FAct傳給附屬Fragment
2、Activity <---> FragmentActivity 通過Intent傳遞 如果涉及加載模式傳遞參數的話,需要通過 onNewIntent(Intent intent) 獲取intent, getIntent()已經被onNewIntent()攔截
3、Fragment <---> Fragemt Fragment之間相互切換通過bundle,setArguments傳遞數據
4、FragmentActivity <---> Fragment 通過接口傳遞數據,因爲Arguments在一開始創建Fragment就必須傳進去,要是再次設置報
java.lang.IllegalStateException: Fragment already active 異常
12-19 10:28:01.393: E/AndroidRuntime(25224): java.lang.IllegalStateException: Fragment already active 12-19 10:28:01.393: E/AndroidRuntime(25224): at android.support.v4.app.Fragment.setArguments(Fragment.java:530) 12-19 10:28:01.393: E/AndroidRuntime(25224): at com.pupuwang.sjzx.fragment.HomeFragment.setArguments(HomeFragment.java:198) 12-19 10:28:01.393: E/AndroidRuntime(25224): at com.pupuwang.sjzx.fragment.FragmentMainActivity.setFragmentIndicator(FragmentMainActivity.java:46) 12-19 10:28:01.393: E/AndroidRuntime(25224): at com.pupuwang.sjzx.fragment.FragmentMainActivity.onNewIntent(FragmentMainActivity.java:77) 12-19 10:28:01.393: E/AndroidRuntime(25224): at android.app.Instrumentation.callActivityOnNewIntent(Instrumentation.java:1156) 12-19 10:28:01.393: E/AndroidRuntime(25224): at android.app.ActivityThread.deliverNewIntents(ActivityThread.java:2454) 12-19 10:28:01.393: E/AndroidRuntime(25224): at android.app.ActivityThread.performNewIntents(ActivityThread.java:2467) 12-19 10:28:01.393: E/AndroidRuntime(25224): at android.app.ActivityThread.handleNewIntent(ActivityThread.java:2476) 12-19 10:28:01.393: E/AndroidRuntime(25224): at android.app.ActivityThread.access$1400(ActivityThread.java:157) 12-19 10:28:01.393: E/AndroidRuntime(25224): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1412) 12-19 10:28:01.393: E/AndroidRuntime(25224): at android.os.Handler.dispatchMessage(Handler.java:99) 12-19 10:28:01.393: E/AndroidRuntime(25224): at android.os.Looper.loop(Looper.java:153) 12-19 10:28:01.393: E/AndroidRuntime(25224): at android.app.ActivityThread.main(ActivityThread.java:5326) 12-19 10:28:01.393: E/AndroidRuntime(25224): at java.lang.reflect.Method.invokeNative(Native Method) 12-19 10:28:01.393: E/AndroidRuntime(25224): at java.lang.reflect.Method.invoke(Method.java:511) 12-19 10:28:01.393: E/AndroidRuntime(25224): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:848) 12-19 10:28:01.393: E/AndroidRuntime(25224): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615) 12-19 10:28:01.393: E/AndroidRuntime(25224): at dalvik.system.NativeStart.main(Native Method)
fragment之間參數傳遞
public static HomeFragment newInstance(int index) { HomeFragment hf = new HomeFragment(); Bundle bundle = new Bundle(); bundle.putInt("index", index); hf.setArguments(bundle); Log.e(TAG, "--------index------:" +index); return hf; } public int getShownIndex() { Bundle bundle = getArguments(); if(bundle==null){ return -1; }else{ return bundle.getInt(IntentKeys.SHOP_INFO, 0); } }
接口回調傳遞參數
注意要在fragment中的此方法中轉換下
@Override public void onAttachFragment(Fragment fragment) { try { if(fragment instanceof IBtnCallListener){ mbtnListener = (IBtnCallListener) fragment; }else if(fragment instanceof IFragmentArguments){ mIFragArg = (IFragmentArguments)fragment; } } catch (Exception e) { // TODO: handle exception } super.onAttachFragment(fragment); }
通過自定義接口回調
public interface IFragmentArguments { public void setIArguments(Bundle bundle); }