码迷,mamicode.com
首页 > 移动开发 > 详细

初学_Android4高级编程-2 Fragment

时间:2015-07-06 19:45:12      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

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。

初学_Android4高级编程-2 Fragment

标签:

原文地址:http://www.cnblogs.com/waiting-light/p/4625125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!