一.fragment的生命周期,具體方法什么時候調用就不說了。
二 在activity中使用fragment和通信有兩種常見的方式,
1.靜態的方式
(1)定義一個類繼承Fragment,如 MyFragment,這里復寫onCreateView()方法和onAttach()方法
(2)onCreateView()加載一些布局對象以及設置View對象,並返回一個View對象,onAttach()通信的時候用到
(3)在activity的layout的布局文件中引用Fragment繼承類(注意設置name屬性為MyFragment的全包名,另外設置id或者tag其中一種數據即可)
以上就可以在activity使用Fragment了,如果要互相通信,接着下面(包含上面 1 2 3步驟)
(4.1)activity向Fragment發送數據
(4.2)在MyFragment中定義私有成員變量,並實現get和set方法用來接收數據,直接上代碼
FragmentManager fragmentManager = getFragmentManager();
Fragment findFragmentById = fragmentManager.findFragmentById(R.id.fragment);
MyFragment myFragment= (MyFragment) findFragmentById;// 找到fragment
myFragment.setAa("avtivity傳的值");
(4.3) 可以在MyFragment 通過getAa()獲取到數據了
(5.1) Fragmenty向activit發送數據
(5.2)通過成員變量
(5.4)activity實現MyInterface 接口,就可以通過接口中的方法參數獲得傳進來的值
2動態的方式
(1)定義一個類繼承Fragment,如 MyFragment,這里復寫onCreateView()方法和onAttach()方法
(2)在activity中動態加載Fragment
MyFragment fragment2 = new MyFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
beginTransaction.add(R.id.ll_load_fragment, fragment2);//將fragment2 添加到id為ll_load_fragment的布局中
beginTransaction.commit();
(3.1)activity向Fragment傳值
MyFragment fragment = new MyFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
Bundle bundle = new Bundle();
String value = "activity傳的值";
bundle.putString("name", value);
fragment.setArguments(bundle);// 將bundle數據加到Fragment中
beginTransaction.add(R.id.ll_load_fragment, fragment, "fragment");
beginTransaction.commit();
(3.2)在MyFragment 中通過getArguments().get(key)獲取值
(4.1)Fragment向activity傳值
在MyFragment 中定義一個接口
private MyInterface myInterface;
public interface MyInterface{
public void sendMsg(Object object);
}
(4.2)通過onAttach(Activity activity)方法將activity轉為myInterface
public void onAttach(Activity activity) {
myInterface=(MyInterface) activity;
super.onAttach(activity);
}
利用接口實現Fragment與Activity的信息傳遞.
總結一下Fragment與Activity之間交換數據的方式:
動態
* 1 Activity向Fragment傳遞數據
fragment.setArguments(bundle)
* 2 Fragment向Activity傳遞數據
在Fragment內部定義一個回調接口.讓包含該Fragment的
Activity實現該接口.這樣Fragment就可調用該回調方法
將數據傳給Activity
靜態
* 1 Activity向Fragment傳遞數據
直接調用Fragment繼承類的set方法
* 2 Fragment向Activity傳遞數據
直接調用Fragment繼承類的get方法
就是通過Fragment繼承類成員變量的get和set方法實現互相傳值