Fragment生命周期和Activity通讯方法
程序员文章站
2022-05-14 08:05:51
...
Fragment生命周期
1. Fragment为什么被成为第五大组件
- android3.0引入,为了兼容大屏幕。
- Fragment有自己的生命周期
- 可以动态加载到acitivty中
两种加载方式
1)静态加载,通过布局文件
2)动态加载,通过FragmentManager
FragmentPagerAdapter和FragmentStatePagerAdaper区别
FragmentPagerAdaper中切换Fragment时,不可见的Fragment只是与activity分离了,并不会被回收,适用于页面少:
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
if (DEBUG) Log.v(TAG, "Detaching item #" + getItemId(position) + ": f=" + object
+ " v=" + ((Fragment)object).getView());
mCurTransaction.detach((Fragment)object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
...
Fragment fragment = mFragmentManager.findFragmentByTag(name);
if (fragment != null) {
if (DEBUG) Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment);
mCurTransaction.attach(fragment);
}
...
return fragment;
}
FragmentStatePagerAdapter适用于页面多:
This version of the pager is more useful when there are a large number of pages, working more like a list view. When pages are not visible to the user, their entire fragment may be destroyed, only keeping the saved state of that fragment.
Fragment生命周期
- onAttach(),表示fragment已经附加在activity上了,自此可以通过getActivity获得活动的引用
- onCreate(),表示创建这个Fragment,此时可以通过getArguments获得参数
- onCreateView(),该方法需要返回fragment的根视图
- onViewCreate(),表示视图已经创建完成,可以对控件进行初始化
- onActivityCreated,表示活动已经创建完成,这是在用户看到用户界面之前你可对用户界面执行的最后调整的地方
- onStart(),表示已经可见
- onResume(),表示可以进行交互
记忆:附加->创建->创建视图->视图创建完毕->活动创建完毕->开始->可见
Fragment和Activity之间的方法调用
推荐的Fragment调用Activity中的方法:由Fragment定义,Activity实现这个接口,这种写法成为接口回调
private OnFragmentInteractionListener mListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof OnFragmentInteractionListener) {
mListener = (OnFragmentInteractionListener) context;
}
else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
void onFragmentInteraction(String data);
推荐阅读
-
Android编程实现横竖屏切换时不销毁当前activity和锁定屏幕的方法
-
PHP实现连接设备、通讯和发送命令的方法
-
android使用service和activity获取屏幕尺寸的方法
-
重温Android和Fragment生命周期
-
Android开发教程之Fragment定义、创建与使用方法详解【包含Activity通讯,事务执行等】
-
C# WPF上位机实现和下位机TCP通讯的方法
-
AndroidX下使用Activity和Fragment的变化详解
-
AndroidX下使用Activity和Fragment的变化详解
-
Android开发使用Activity嵌套多个Fragment实现横竖屏切换功能的方法
-
Fragment和Activity之间传值的方法