标签:
Fragment允许将activity拆分成多个完全独立封装的可重用控件。每个组件有它自己的生命周期和UI布局。(类似于一个嵌入在activity中的activity)
通过继承Fragment来创建一个新的Fragment,大多数情况下,需要为Fragment分配一个UI(xml布局文件),也可以创建一个没有任何UI的后台行为的Fragment。
public class MyFragment extends Fragment{
//调用该方法连接它的父Activity
@Override
public void onAttach(Activity Activity){
super.onAttach(Activity);
//获取对父Activity的引用
}
//调用该方法来进行Fragment的初始创建
@Override
public void onCreate(Bundle saveInstanceState){
super.onCreate(saveInstanceState);
//初始化Fragment
}
//Fragment创建完毕后,继续创建它自己的用户界面时调用该方法
@Override
public void onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState){
//创建或填充Fragment的UI,并返回它,没有UI返回null
return inflater.inflate(R.layout.head_fragment_viead, container, false);
}
//一旦父Activity和Fragment的UI已被创建,则调用该方法。
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
//完成初始化---尤其是父Activity被初始化完成后或者Fragment的View被完全填充
后才能做的事
}
//在可见生命周期开始时调用
@Override
public void onStart(){
super.onStart();
//应用所有需要的UI变化,现在Fragment是可见的
}
//在活动生命周期开始时调用
@Override
public void onResume(){
super.onResume();
//恢复所有暂停的Fragment需要的UI更新,线程或进程。但在非活动状态是暂停的
}
//在活动生命周期结束时调用
@Override
public void onPause(){
//当Fragment不是活动的前台Fragment时,需要暂停UI的更新,挂起线程或者暂停那些不需要更新的CPU的集中处理。由于调用这个方法后,进程可能被终止,所以要保存 所有的编辑和状态改变信息
super.onPause();
}
//当活动生命周期结束时,调用该方法保存UI的状态变化
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
//将UI的状态改变信息保存到savedInstanceState中
super.onSaveInstanceState(savedInstanceState);
}
//在可见生命周期结束时调用
@Override
public void onStop(){
//当Fragment不可见时,暂停其余的UI更新、挂起线程或者暂停不再需要的处理
super.onStop();
}
//当Fragment的View被分离时,调用该方法
@Override
public void onDestroyView(){
//清楚资源相关的View
super.onDestroyView();
}
//在整个生命周期结束时调用该方法
@Override
public void onDestroy(){
//清楚所有的资源,包括结束线程和关闭数据库连接等
super.onDestroy();
}
//当Fragment从它的父Activity上分离时,调用该方法
@Override
public void onDetach(){
super.onDetach();
}
}
通过静态方式向Activity中填充Fragment。
<fragment
android:name="package.MyFragment"
/>
通过动态方式向Activity中填充Fragment。
Fragment状态转换与他相应的Activity的状态转换密切相关。当Fragment暂停或停止时,保存的所有的UI状态和持久化的数据非常重要。
每个Activity都包含一个Fragment Manager来管理它包含的Fragment。
//得到FragmentManager
FragmentManager fragmentManager = getFragmentManager();
//得到FragmentTransaction
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//添加,删除,替换,指定动画,添加到back栈中。
//添加
fragmentTransaction.add(R.id.title_fragment,new MyFragment());
//查找,删除
Fragment fragment = fragmentManager.findFragmentById(R.id.title_fragment)
fragmentTransaction.remove(fragment);
//替换
fragmentTransaction.replace(R.id.body_fragment,new BodyFragment(index))
//设置back栈
String tag = null;
fragmentTransaction.addToBackStack(tag);
//添加动画,接收两个动画XML
fragmentTransaction.setCustomAnimations(R.animator.silde_in_left,
R.animator.silde_out_right);
fragmentTransaction.commit();
?通过回调接口向Activity通信。在Fragment需要和它的主Activity共享事件的地方,最好在Fragment中创建一个callback接口,而主Activity必须实现它。
private MyListener myListener;
private String str;
public interface MyListener{
public void getStr(String str);
}
public void onAttach(Activity activity){
super.onAttach(activity);
//catch异常
myListener = (MyListener)activity;
str = new String("callback");
myListener.getStr(str);
}
没有用户界面的Fragment适合于定期和UI交互的后台任务或者因配置改变而导致Activity重新启动时,保存状态变得特别重要的场合。
fragmentManager.beginTransaction.add(workerFragment,TAG).commit;
myFragment = (MyFragment) fragmentManager.findFragmentByTag(TAG);
使用方便的Fragment子类。DialogFragment,ListFragment,WebViewFragment。
标签:
原文地址:http://www.cnblogs.com/waiting-light/p/4625125.html