- Fragment概述:
- Fragment为片段,在Android3.0(api:11)的时候加入,早期是为了大屏幕(如平板)而设计的。因为平板要比手机的屏幕大的多,在UI设计方面会留有比手机大的多的空间,利用片段来实现UI设计,可以将UI分隔成多个不同的模块,即可以实现复杂的UI设计,又可以实现复用,并且可以在Android运行时动态的添加和删除片段,对开发提供了极大的便利。
Fragment的生命周期:
成都创新互联专注于辽阳网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供辽阳营销型网站建设,辽阳网站制作、辽阳网页设计、辽阳网站官网定制、微信小程序开发服务,打造辽阳网络公司原创品牌,更为您提供辽阳网站排名全网营销落地服务。- Fragment必须依附Activity而存在,因此Fragment的生命周期和Activity极为相识,但是又有自己独特的生命周期回调。
Fragment正常情况下从创建到销毁的生命周期回调:onAttach(依附于宿主activity),onCreate(系统创建Fragment),onCreateView(创建布局文件),onActivityCreated(activity 的onCreate回调后会调用该生命周期方法),onStart(),onResume(),onPause(),onStop(),onDestroyView(),onDestroy(),onDetach()
旋转屏幕时的生命周期:
- 无论是从竖屏转向横屏还是横屏转竖屏,都是一个正常的销毁重建流程,生命周期的回调为:onPause(),onStop,onDestroyVie,onDestroy(),onDetach(),onAttach(),onCreate(),onCreateView(),onActivityCreated(),onStart(),onResume()。
2.将手机屏幕向上,旋转180度,不会触发任何生命周期。
- 无论是从竖屏转向横屏还是横屏转竖屏,都是一个正常的销毁重建流程,生命周期的回调为:onPause(),onStop,onDestroyVie,onDestroy(),onDetach(),onAttach(),onCreate(),onCreateView(),onActivityCreated(),onStart(),onResume()。
- 创建界面:
- 拓展Fragment,并在onCreateView中添加相应的布局。
添加到Activity中:
- 在布局文件中使用fragment属性:
- 在Java代码中添加:
FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);//第一个参数是 ViewGroup,即应该放置片段的位置,由资源 ID 指定,第二个参数是要添加的片段。
fragmentTransaction.commit();- 在布局文件中使用fragment属性:
- 注意事项:
- 一个FragmentTransaction只能执行一次
- 相同的Fragment不能被add到同一个Fragment
- 容器未移除视图就add新的Fragment会发生内容重叠
DialogFragment:
- DialogFragment是在Android3.0以后引入的一种特殊的Fragment,官方推荐使用DialogFragment,原因在于:DialogFragment与Fragment有着相同的生命周期,便于管理生命周期,DialogFragment也可以实现重用,另外DialogFragment可以有普通Dialog没有优势,比如可以防止窗体泄露,具体情况下面的 window Leak。
拓展DialogFragment需要实现onCreateView或者onCreateDialog:
// 实现onCreateView @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View inflate = inflater.inflate(R.layout.dialog_fragment_test1, container); return inflate; }
// 实现onCreateDialog @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); LayoutInflater inflater = Objects.requireNonNull(getActivity()).getLayoutInflater(); builder.setView(inflater.inflate(R.layout.dialog_fragment_test1, null)); return builder.create(); }
- 普通的Dialog在屏幕旋转的时候会抛出异常,但是DialogFragment不会抛出异常信息。下面是使用普通的Dialog在屏幕旋转时发生的异常信息:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前文章:Fragment使用详解-创新互联
转载来于:http://lswzjz.com/article/dscsic.html