Android(4)——Fragment,ViewPager

Android

安卓开发者指南:https://developer.android.google.cn/guide

1 Fragment

1.1 概述

设计思想:
为了解决不同分辨率的终端适配问题,简化Activity。

Fragment VS Activity
1.Fragment是到Android3.0+以后
2.一个Activity可以运行多个Fragment
3.Fragment不能脱离Activity而存在
4.Activity是屏幕的主体,而Fragment是Activity的一个组成元素

1.2 生命周期

在这里插入图片描述
当Fragment从创建到运行时回调的生命周期方法有:

  1. onAttach():当 Fragment依附到Activity时调用的方法
  2. onCreate():当Fragment创建时调用的方法
  3. onCreateView():给Fragment加载布局时调用的方法
  4. onActivityCreated():当该Fragment依附的Activity 创建时调用的方法
  5. onStart():当 Fragment启动时调用的方法
  6. onResume():当 Fragment正在运行时调用的方法

当Fragment不在使用时调用的生命周期方法:onPause();
当Fragment不在交互时调用该方法:onStop();
当Fragment不再可见时调用该方法:onDestroyView();
销毁Fragment布局时调用的方法:onDestroy();
当Frament销毁时调用的方法:onDetach();当Fragment完全脱离Fragment时调用的方法

1.3 静态、动态加载
1.3.1 静态加载:XML

在onCreateView中可以写很多、很复杂的layout,进行模块化。

静态加载核心,直接写在布局里。fragment好处:模块化,可重用,适配

1.3.2 动态加载:java code

好处:优势更大,灵活

动态切换实例
add
remove
replace

1.4 传值

Activity->Fragment:setArguments

Fragment->Activity:Callback回调

MainActivity实现上面定义的接口ListFragment.OnTitleClickListener,重写onClick()方法:

2 ViewPager导航效果

应用场景:
1.引导界面、相册多图片预览
2.多Tab页面、App导航
3.广告播放展示

应用背景:
1.android.support.v4.view.ViewPager
2.Names: V4 v7 v8 v13 v17 etc.
3.Android Support Libraries
4.如何引入( jar or aar? )

概念介绍:
1.List< View> || List< Fragment>
2.PageAdapter || FragmentPageAdapter
3.Show me the code

代码实现:



这是三个文本左右滑动展示,如果改成图片,只需要修改初始化数据的循环为图片:

实现导航的那个点,动态添加:
设置adapter,这是设置的默认初始的位置:



动态出现三个点,但是不知道是哪一个,就要在当前的那个位置上改变一张图片 看效果:

Fragment配合ViewPager
TestFragment.java:extends Fragment

ViewPager实践的三种效果
1.引导界面ViewPager图片浏览器
2.FragmentPageAdapter
3.常见Tab切换效果

实现底部导航:

控件:TabHost

标签TabWidget中添加android:showDividers="none"消除三个tab之间的竖线
做出左右滑动三个fragment的效果:



注意:这个item有一个顺序排序,默认是看第一个灰色的状态,所以换个位置,把第一个item放到最后一行。

实现接口TabHost.TabContentFactory:


滑动的时候选个tab:

ViewPager和tab的互动:

千姿百态的ViewPager动画
1.用PageTransformer自定义动画 : setPage Transformer
2.Zoom-out Page Transformer
3.Depth Page Transformer

support包里的其它重要控件有:
ViewPager,Fragment,

3 LayoutInflater类

LayoutInflater是一个抽象类,继承自Object,位于android.view包下,作用类似于findViewById() ,不同的是LayoutInflater找的是xml布局文件并且实例化,而findViewById()找到具体widget控件。

LayoutInflater什么时候用?
有时我们需要动态的载入一个xml布局从而获取其中的控件,这时就需要使用LayoutInflater,作用是将xml布局文件实例化为它对应的View对象。这个类不能直接使用,也就是不能直接调用其中的成员。

如何使用:
1、获取LayoutInflater实例。
LayoutInflater这个类不能直接使用,也就是不能直接调用其中的成员, 需要先获取其实例再使用。获取实例的方式如下:
方式1:LayoutInflater inflater = getLayoutInflater(); //getLayoutInflater()是Activity类中的方法,直接在Activity类中调用

方式2:LayoutInflater inflater = (LayoutInflater)context.getSystemService( Context.LAYOUT JINFLATER _SERVICE);

方式3:LayoutInflater inflater = LayoutInflater.from(context); //context当前上下文

2、使用LayoutInflater的inflate() 方法加载布局文件,inflate()有如下几种重载方法:
方法1:public View inflate (XmlPullParser parser, ViewGroup root)
方法2:public View inflate (XmlPullParser parser, ViewGroup root, boolean attachToRoot)
上述方法1和方法2是通过XmlPullParser作为数据来源创建View对象;下面方法3和方法4是最常用的通过resource目录下的文件作为数据来源来创建View对象。
方法3:public View inflate (int resource, ViewGroup root)
参数1为要填充的xmI文件(只能使用res目录下的布局文件,不能使用其他xml文件)。参数2为生成的view对象的父控件。如果设置null 并且提供了root则返回root作为根布局,否则,返回填充出的view对象的根布局作为根布局。
方法4:public View inflate (int resource, ViewGroup root, boolean attachToRoot)
参数1同方法3,参数2和参数3需要联合设置,若是第三个参数为true,那么第二个参数代表从第一个参数填充成的view对象的父控件;参数三是个boolean ,表示是否需要从第一个参数填充成的 view对象附着到第二个参数指定的控件上。如果第二个参数为null,也就是我们不指定父控件,那么新生产的view对象的根布局的某些参数会失效。返回:如果提供了root,且第三个参数为true,则返回root作为根布局,否则,返回填充出的view对象的根布局作为根布局。

3、获取加载的布局文件中的某一个控件实例
例如,如下代码从layout main.xml中动态获取id为edText的EditText控件实例。LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_ INFLATER SERVICE);
View view = inflater.inflate(R.layout.layout main, null);
EditText editText = (EditText)view.findViewById(R.id.edText);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值