AndroidFragment真正的完全解析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1/10AndroidFragment真正的完全解析(上)转载请标明出处:自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~本篇博客力求为大家说明Fragment如何产生,什么是Fragment,Fragment生命周期,如何静态和动态的使用Fragment,Fragment回退栈,Fragment事务;以及Fragment的一些特殊用途,例如:没有布局的Fragment有何用处?Fragment如何与Activity交互?Fragment如何创建对话框?Fragment如何与ActionBar集成等等。1、Fragment的产生与介绍Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应平板神马超级大屏的。难道无法做到一个App可以同时适应手机和平板么,当然了,必须有啊。Fragment的出现就是为了解决这样的问题。你可以把Fragment当成Activity的一个界面的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成,更帅气的是Fragment拥有自己的生命周期和接收、处理用户的事件,这样就不必在Activity写一堆控件的事件处理的代码了。更为重要的是,你可以动态的添加、替换和移除某个Fragment。2、Fragment的生命周期Fragment必须是依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期。官网这张图很好的说明了两者生命周期的关系:可以看到Fragment比Activity多了几个额外的生命周期回调方法:onAttach(Activity)当Fragment与Activity发生关联时调用。onCreateView(LayoutInflater,ViewGroup,Bundle)创建该Fragment的视图onActivityCreated(Bundle)当Activity的onCreate方法返回时调用onDestoryView()与onCreateView想对应,当该Fragment的视图被移除时调用onDetach()与onAttach相对应,当Fragment与Activity关联被取消时调用注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现,3、静态的使用Fragment嘿嘿,终于到使用的时刻了~~2/10这是使用Fragment最简单的一种方式,把Fragment当成普通的控件,直接写在Activity的布局文件中。步骤:1、继承Fragment,重写onCreateView决定Fragemnt的布局2、在Activity中声明此Fragment,就当和普通的View一样下面展示一个例子(我使用2个Fragment作为Activity的布局,一个Fragment用于标题布局,一个Fragment用于内容布局):TitleFragment的布局文件:[html]viewplaincopy?xmlversion=1.0encoding=utf-8?RelativeLayoutxmlns:android=:layout_width=match_parentandroid:layout_height=45dpandroid:background=@drawable/title_barImageButtonandroid:id=@+id/id_title_left_btnandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_centerVertical=trueandroid:layout_marginLeft=3dpandroid:background=@drawable/showleft_selector/TextViewandroid:layout_width=fill_parentandroid:layout_height=fill_parentandroid:gravity=centerandroid:text=我不是微信android:textColor=#fffandroid:textSize=20spandroid:textStyle=bold//RelativeLayoutTitleFragment[java]viewplaincopypackagecom.zhy.zhy_fragments;importandroid.app.Fragment;3/10importandroid.os.Bundle;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.ViewGroup;importandroid.widget.ImageButton;importandroid.widget.Toast;publicclassTitleFragmentextendsFragment{privateImageButtonmLeftMenu;@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){Viewview=inflater.inflate(R.layout.fragment_title,container,false);mLeftMenu=(ImageButton)view.findViewById(R.id.id_title_left_btn);mLeftMenu.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){Toast.makeText(getActivity(),iamanImageButtoninTitleFragment!,Toast.LENGTH_SHORT).show();}});returnview;}}同理还有ContentFragment的其布局文件:[html]viewplaincopy?xmlversion=1.0encoding=utf-8?LinearLayoutxmlns:android=:layout_width=match_parentandroid:layout_height=match_parentandroid:orientation=verticalTextViewandroid:layout_width=fill_parentandroid:layout_height=fill_parent4/10android:gravity=centerandroid:text=使用Fragment做主面板android:textSize=20spandroid:textStyle=bold//LinearLayout[java]viewplaincopypackagecom.zhy.zhy_fragments;importandroid.app.Fragment;importandroid.os.Bundle;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;publicclassContentFragmentextendsFragment{@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){returninflater.inflate(R.layout.fragment_content,container,false);}}MainActivity[java]viewplaincopypackagecom.zhy.zhy_fragments;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.Window;publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);5/10setContentView(R.layout.activity_main);}}Activity的布局文件:[java]viewplaincopyRelativeLayoutxmlns:android=:tools=:layout_width=match_parentandroid:layout_height=match_parentfragmentandroid:id=@+id/id_fragment_titleandroid:name=com.zhy.zhy_fragments.TitleFragmentandroid:layout_width=fill_parentandroid:layout_height=45dp/fragmentandroid:layout_below=@id/id_fragment_titleandroid:id=@+id/id_fragment_contentandroid:name=com.zhy.zhy_fragments.ContentFragmentandroid:layout_width=fill_parentandroid:layout_height=fill_parent//RelativeLayout是不是把Fragment当成普通的View一样声明在Activity的布局文件中,然后所有控件的事件处理等代码都由各自的Fragment去处理,瞬间觉得Activity好干净有木有~~代码的可读性、复用性以及可维护性是不是瞬间提升了~~~下面看下效果图:4、动态的使用Fragment上面已经演示了,最简单的使用Fragment的方式~下面介绍如何动态的添加、更新、以及删除Fragment为了动态使用Fragment,我们修改一下Actvity的布局文件,中间使用一个FrameLayout,下面添加四个按钮~~~嘿嘿~~不是微信的按钮--![html]viewplaincopyRelativeLayoutxmlns:android=:tools=

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功