封装UI和代码利器—Fragment(三)

来源:互联网 发布:楚汉争霸java 编辑:程序博客网 时间:2024/06/01 18:47

     每天我都会将以前学到的,刚刚学到的知识点整理复习一遍。以便对于这些知识点的理解能够深一些,将来用起来会得心应手一些。好的,废话不多说。

今天我要复习的是如何创建Fragment。创建Fragemnt大概有两种方法。第一种通过XML布局文件创建Fragment,第二种是通过java代码创建Fragment.


(一)通过XML布局文件创建Fragment

在前两期我用的就是这种方法来创建Fragment的。在布局文件中使用<fragment>标签声明Fragment,需要注意的几个属性就是

android:tag   这个属性用于指定一个字符串,是另一种引用Fragment的方法。FragmentManager.findFragmentByTag方法通过android:tag属性值找到Fragment .

android:name  这个属性和class属性的用法完全一样,指定的Fragment类的全名

Fragement 想要显示相关控件时,需要实现Fragment.onCreateView方法,并通过该方法返回Fragment中显示的根试图对象。

(二)通过Java代码创建Fragment

这种是我复习的重点对象,如何通过Java代码动态创建Fragment .首先需要了解与其相关的两个比较重要的类,大家想想在一个宿主窗口上,放着不同的Fragment,为了方便管理,就有了FragmentManager这个类,而另外一个是FragmentTransation类,这个类顾名思义,Transation 这个英文单词是事务的意思,因此主要用于对Fragment执行具体的操作。例如添加Fragment,删除Fragment等等。 


上面的代码涉及了三个方法,beginTransation    commit    add 其中前两个方法用于处理Fragment事务,主要是为提高效率。add方法有三个重载形式

本次只涉及到其中一种  

public  abstract  FragmentTransation add( int  containerViewId, Fragment   fragment)    

第一个参数是绑定的视图容器的ID,FrameLayout  叫堆栈布局,这里不作细讲。第二个参数是Fragment 对象。

下面则是重中之重,尽管前面的代码可以将Framgment添加到视图容器中去,但是Fragment的尺寸和位置的问题没有解决,由于Fragment类并没有设置布局的方法,所以就需要在Fragment.onCreateView方法中创建视图对象的过程中处理。

在前面介绍的inflate方法我们的代码是这样写的  

View   view =inflater.inflate(    R.layout_fragment,    null); 实现当然是没有问题的,只是Fragment的布局也就失去控制了。那我们如何来控制布局呢?

public  View infalte(int resource  ,  ViewGroup   root   ,  boolean  attachToroot)   

第一参数是指显示的视图资源ID   

第二参数  是绑定的视图容器对象(FrameLayout)

第三参数  这里应该设置为false  因为设置为true的话 视图资源就会作为root  的子视图存在  这样就与Android系统中规定一个视图同时只能有一个父视图相冲突。如果这是false,这样表示指定的视图并不属于视图容器的子视图了。



这一节就复习到这里。

0 0
原创粉丝点击