android之Fragment

Android Fragment

好久没写博客了,本来打算是一周写一遍总结的,但是计划永远赶不上变化,前两周还在学习ndk开发,本周就被公司安排又来开始做android界面的开发了。今天就把我这一周来用到的一个知识点,Fragment和大家分享一下。

 

1、Fragment允许将Activity拆分成过关完全独立封装的可重用组件,每一组件都有他自己的生命周期和ui布局。我先描述一下我要做的东西,就是在Activity的主界面,做一个界面切换的布局,如图

 

 

这是我们的效果图,点击下面的各个选项,界面可以相互切换,要实现这个功能,可以有很多种方法,如利用viewPager控件,viewpager控件可以实现左右切换,但是下面的这些选项(动态,首页。。。)等等就不太容易布局了。也可以单独为没有选项做一个Activity,但是那样切换的时候,资源消耗过大不说,也容易出现界面切换太明显的效果,所以我就考虑用Fragment了。

2、Fragment最大的优点就是让你可以灵活动态的处理界面问题,你可以根据需要,随意对Fragment进行添加,删除,和替换,我的这个项目,主要是用了替换。

3、创建一个新的Fragment,可以通过基础Fragment类来创建一个新的Fragment,在android框架内编程,这都是固定模式了。大多数情况下,需要为Fragment分配一个ui这就需要重写onCrateView方法来填充并返回需要的view层次。

 

这是我的动态FragmentonCreatView方法,一般在返回布局前,需要对布局进行初始化,就像在ActivityonCreate方法里面做的事一样。这里面也会涉及到Fragment的生命周期,其实和Activity也差不多,这里就不多说了。

 

 

4、要对Fragment进行控制,就要有管理Fragment的类,在这里,android给我们提供了一个FragmentManager类,可以通过ActivitygetFragmentManager()方法来的得到这个FragmentManager的对象。而这个FragmentManager就提供了添加,删除,替换Fragment的方法。

5、为Activity添加Fragment最简单的方式是在布局文件中直接使用Fragment标签来包含你之前新建的Fragment类就ok了。如图

 

当然,在我的项目中我是用了另外一种方式,就是在布局文件中先放一个Fragment的容器,先占一个位置,然后在代码中更具需要,随意添加,替换那都是你的事。在布局中的代码如图:

 

这个容器做好了,那就可以在代码中控制他了。

6、添加,删除,替换,都用同一个模式就ok了。首先要通过FragmentManager对象得到一个Fragment事务,即FragmentTransaction的对象,通过FragmentTransaction对象,就可以进行添加,删除,替换了。代码如下。

// 开启事务

mFragmentTransaction = mFragmentManager.beginTransaction();

 

// 添加首页Fragment

mFragmentTransaction.add(R.id.main_ui_container_framelayoutmDynamicFragment);

 

// 替换Fragment

mFragmentTransaction.replace(R.id.main_ui_container_framelayout,mDynamicFragment);

 

//删除Fragment

mFragmentTransaction.remove(mDynamicFragment);

 

// 提交事务

mFragmentTransaction.commit();

最后一点要记得提交事务。

7、如果你是在Activity的布局文件中直接使用Fragment标签来添加的Fragment,那你就可以再Activity中使用FindFragmentByID这个方法来通过Fragment的资源id来找到这个Fragment,但是,如果你在Activity的布局文件中使用的是布局容器,那就只能用findFragmentByTag()这个方法了。这一点主要一下。

8、Fragmentback栈。Fragment能够创建动态的Activity布局,这些布局可以被修改是ui发生重大的变化,在某些情况下,这些改变可以视为一个新的屏幕,在这样的情况下,用户可能会理所当然的期望按下back按键,程序会退回到上一个界面,那android也提供了这样的技术,你只有在commit方法之前,调用FragmentTransactionaddToBackStack()方法,那你commit之后到了新的界面,然后按下back按键,程序就回到了你上一个界面。

比如。

// 开启事务

mFragmentTransaction = mFragmentManager.beginTransaction();

 

// 替换Fragment

mFragmentTransaction.replace(R.id.main_ui_container_framelayout,mDynamicFragment);

 

// 添加回退栈

mFragmentTransaction.addToBackStack("");

 

// 提交事务

mFragmentTransaction.commit();

 

假如你是用现在的mDynamicFragment代替了之前的Fragment1,那有了addToBackStack方法,当你在mDynamicFragment界面的时候,你按下back按钮,那程序就回到了Fragment1界面了。

 

呵呵,至此,Fragment就算是讲完了,如果有什么不明白的,加我qq,大家在一起相互讨论吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值