生命周期
Create阶段:
onAttach,onCreate,onCreateView,onActivityCreated
Destory阶段:
onDestroyView,onDestory,onDettach.
onAttached()
当fragment被加入到activity时调用(在这个方法中之后可以获得所在的activity)
onCreateView()
当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。
onActivityCreated()
当activity的onCreated()方法返回后调用此方法
onDestroyView()
当fragment中的视图被移除的时候,调用这个方法。
onDetach()
当fragment和activity分离的时候,调用这个方法。
Activity传递数据给Fragment
在Activity中,将数据放到Bundle对象,调用Fragment对象的setArguments(Bundle bundle) 存入数据
在Fragment中,使用getArguments()获取到在Activity中存入的Bundle
| 1 2 3 4 5 6 7 8 9 10 | // Activity // 通过Bundle对象传递数据  MyFragment fragment = new MyFragment(); Bundle bundle = new Bundle();  bundle.putCharSequence("parms", "p");  fragment.setArguments(bundle);  //Fragment //取出数据,在MyFragment中调用下面的方法 String name = (String) getArguments().getCharSequence("parms"); | 
Fragment之间传递数据
Fragment之间最好不要直接传递,借助activity传递
步骤:
1. 使Activity implements一个接口A,重写A中的方法
2. Fragment中使用getActivity()将activity强制转换为接口A(如果activity没有实现接口,则会报错),赋值给Fragment中的A实例,回调
在Activity中重写的方法中调用另一个Fragment的public方法
与Activity交互
调用Activity中的方法
mainActivity = (MainActivity) getActivity(); 使用获取到的对象调用MainActivity中的方法
获取关联的同一个Activity上的另一个Fragment中的控件
| 1 2 | //其中Button在另一个Fragment, getActivity()获取关联的Activity, 在调用findViewById方法 Button button = (Button) getActivity().findViewById(R.id.button); | 
回退栈
transaction.addToBackStack(String name);
调用tx.addToBackStack(null);将当前的事务添加到了回退栈,所以Fragment实例不会被销毁,但是视图层次依然会被销毁,即会调用onDestoryView和onCreateView.
清空回退栈 getFragmentManager().popBackStackImmediate( null ,1);
切换Fragment
FragmentTransaction对象调用show,add,hide,replace方法
示例:
getFragmentManager().beginTransaction().replace(R.id.contain, fragment);
不推荐直接使用replace切换Fragment,建议使用add+show显示Fragment,同时使用hide隐藏上一个Fragment;
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |     /** 隐藏上一个Fragment */     private void hidePreFragment(FragmentTransaction fragmentTransaction)     {         switch (currIndex)         {         case FragmentSet.CONTACT:             fragmentTransaction.hide(contactFragment);             break;         }     }     /** 显示下一个Fragment */     private void showNextFragment(FragmentTransaction fragmentTransaction,             Fragment fragment)     {         if (!fragment.isAdded())         {             fragmentTransaction.add(R.id.frag_contain, fragment).commit();         }         else         {             fragmentTransaction.show(fragment).commit();         }     } | 
hide方法调用时会触发Fragment的onHiddenChanged回调
注意点
在new一个新的Fragment对象前, 判断该变量名是否为空, 非空时在new新的对象
防止Activity重载时Fragment重复新建, 造成重叠
| 1 2 3 4 |         if (fragment == null)         {             fragment = new MyFragment();         } | 
 
	
0 Comments