Fragment作用:同时适配手机和平板、UI和逻辑的共享。
生命周期:必须依存于Activity
onAttach()→onCreate()→onCreateView()→onActivityCreate()→onStart()→onResume()→onPause()→onStop()→onDestroyView()→onDestroy()→onDetach()
Fragment比Activity多了几个额外的生命周期:
- onAttach(Activity):当Activity和Activity发生关关联时调用
- onCreateView(LayoutInflater, ViewGroup, Bundle):创建该Fragment的视图
- onActivityCreate(Bundle):当Activity的onCreate方法返回时调用
- onDestoryView():当Fragment的视图被移除时调用
- onDetach():当Fragment与Activity关联被取消时调用
加载fragment的流程:
1.获得FragmentManager对象,通过getFragmentManager();
2.获得FragmentTransaction对象,通过fm.beginTransaction();
3.调用add()方法或者replace()方法加载Fragment;
4.最后调用commit()方法提交事务
Fragment与Activity的交互
组件获取
Fragment获取Activity中的组件:
getActivity.findVIewById(R.id,xxx);
Activity获得Fragment中的组件(根据id或者Tag):getFragmentManager.findFragmentById(R.id.xxx)
数据传递
Activity传递数据给Fragment:
在Activity中创建Bundle数据包,调用Fragment实例的setArguments(bundle) 从而将Bundle数据包传给Fragment
Bundle bundle=new Bundle();
bundle.putString("str",str);
fragment.setArguments(bundle);
然后Fragment中调用getArguments获得 Bundle对象,
TextView tv= (TextView) view.findViewById(R.id.tv);
Bundle bundle=getArguments();
tv.setText(bundle.getString("str"));
Fragment传值给Activity
在fragment中定义回调接口
/**
* 接口
* */
public interface CallBack{
/**
定义一个获取信息的方法
* */
public void getResult(String result);
}
/**
* 接口回调
* */
public void getData(CallBack callBack){
callBack.getResult("我是fragment的值");
}
在Activity中实现回调
fragment.getData(new TestFragment.CallBack() {
@Override
public void getResult(String result) {
Toast.makeText(MainActivity.this,result,Toast.LENGTH_LONG).show();
}
});
通过今天对fragment的学习,理解了它们之间是怎样传递数据的,之前也用过,但是并没有真正理解,只知道这样写就对了,等下次用的时候还要看看之前怎样写的,然后copy过来,今天跟着教程一步一步写,记忆更加深刻了。
意外的是收获是知道了回调是怎么一回事,之前老听别人说回调回调的,但是自己没有写过,只是用过,也看过项目中的,但是似懂非懂,今天自己写了一遍,有了一个大概了解。
最后感谢遇到这么负责任的领导。
网友评论