Fragment的基本应用
来源:互联网 发布:华通云数据与马云关系 编辑:程序博客网 时间:2024/06/06 07:52
转载地址:http://blog.csdn.net/crazy1235/article/details/50933621?spm=5176.8246799.blogcont.6.v5bVkP
目录(?)[-]
- Fragment
- fragment生命周期
- fragment的使用
- Fragment的事务管理
- Fragment之间的切换
- Fragment与Activity之间传值
- Fragment与Fragment传值
- Fragment切换动画
Fragment
还是先来基本介绍。
Fragment –> 片段。
在Android3.0的时候被引入,它的出现主要是给大屏幕设备提供更加灵活的UI支持。通过对Activity布局进行分片,更加方便的对每块进行独立控制。这些片段可以被不同的activity复用。
fragment生命周期
每个fragment拥有自己的生命周期,但是fragment要依赖于activity存在,生命周期受到包括它的activity的生命周期控制。
来两张神图~~
左图就是fragment的生命周期图。右图是fragment与activity各自生命周期的对照。
介绍一下常用的几个生命周期函数:
onAttach(Context) –> 当fragment被绑定到activity上时回调
onCreate(Bundle) –> 当fragment对象创建的时候回调,一般在此方法里做参数接收。
onCreateView(LayoutInflater, ViewGroup, Bundle) –> 创建fragment视图时回调
onDestoryView –> 视图销毁时回调
onDestory –> 销毁fragment时回调
onDetech() –> fragment与activity失去关联时回调
fragment的使用
使用fragment可以当成一个控件,直接放到activity布局文件里;也可以在代码里面动态的添加、更新或者删除。
下面的activity布局文件中定义了一个fragment和一个frameLayout。使用标签可以称之为静态的Fragment,在activity创建的时候也会去创建并显示它,而framelayout是一个容器,我们在代码中可以动态的添加一个fragment进去。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
注意:
使用标签显示Fragment的时候,需要对这个fragment设置一个id或者tag,否则会出现”Error inflating class fragment”错误。
- 1
- 1
Fragment的子类继承的时候,如果你的minSdkVersion <= 11,需要引入V4包,然后倒入android.support.v4.app.Fragment包。如果是大于11,直接导入android.app.Fragment包即可。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
动态的添加fragment就需要在代码里面通过FragmentManager等类进行操作:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
Fragment的事务管理
android里通过FragmentManager类进行管理fragment,一组对fragment的操作(添加、删除、替换等)称为一个事务,通过FragmentTransaction类来提交执行。也可以把事务添加到回退栈中,进行回滚。这有点类似于数据库的事务机制。
注意:
事物操作最后必须调用commit()才能执行。
调用commit()方法之后,也不是立刻执行;如果需要立刻执行,可以使用executePendingTransactions()方法。
一次性add多个fragment,显示的是最后一个。
任务栈回退针对的是事务,而不是fragment。一次事务操作过程中可以有很多个对fragment的操作。
只能在activity处于可保存状态的情况下,进行事务操作。否则引发如下异常:
- 1
- 1
比如,在onPause()或者onStop()中提交事务,就会出现以上问题,如果非要在这些生命周期里面进行事务提交,请使用FragmentTransaction类的commitAllowingStateLoss()方法,允许状态丢失。
- 如果activity继承的是AppCompatActivity,onBackPressed()回调函数里面是利用的V4包的getSupportFragmentManager()进行的栈回退,所以做fragment回退的时候需要注意引用的是不是V4包的Fragment类。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
Fragment之间的切换
Fragment的切换就是基本就是利用add()、hide()、show()、replace()这四个方法。
情况一:采用add方式切换fragment
activity:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
TabFragment1代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
TabFragment2代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
此时都是采用add的方式进行显示fragment。每次都会把添加fragment的事务叠加到回退栈上面。
在TabFragment1界面点击按钮添加TabFragment2界面,然后在按返回键回退,打印出生命周期如下:
情况二:采用replace的方式切换fragment
activity代码不变。
TabFragment1的代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
TabFragment1切换到TabFragment2的时候,使用的replace方法。replace方法的作用是remove掉所有添加到相同id的容器里的fragment,然后添加参数里的fragment。所以会回调TabFragment1的onDestoryView()方法,等到从TabFragment2返回的时候,去执行replace事务的相反操作,也就会重新创建TabFragment1的视图,回调onCreateView()方法。
remove:
我们在TabFragment2界面中调用remove方法,把TabFragment1移除掉。
TabFragment1.java:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
TabFragment2.java:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
activity:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
从代码里看到,remove操作的事务没有添加到回退栈中,所以从TabFragment2中返回的时候,直接退到了activity界面。
但是从界面来看,从TabFragment2会退到activity之后,再次按返回键并没有退出activity,然后再按返回键的时候才会退出activity。原因就是,虽然remove了TabFragment1,但是只是回调了onDestoryView()方法销毁了视图,此时TabFragment1的对象资源和与activity的关联还没有断开。所以点击返回键的时候会有一个没有“响应”。
下面看看我们把reomve()操作添加到回退栈的情况:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
与上面的情况相比,多了TabFragment1的onCreateView()这一步。这是因为把remove事务添加到了任务栈,回退的时候逆向执行该操作。
使用replace()方法和remove()方法会导致视图销毁,所以,切换fragment的时候,如果需要视图保留视图,就不能用这两个方法。
Fragment与Activity之间传值
fragment –> activity 99%的做法都是通过接口回调来做的。定义一个接口,activity中实现此接口方法,在fragment里面调用接口方法
activity –> fragment 通过findFragmentById()后者findFragmentByTag()方法获取fragment实例调用fragment里的public方法即可。
接着往下看~~
TabFragment2调用接口方法:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
activity实现该接口的方法:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
在TabFragment1中定义方法供activity调用:
- 1
- 2
- 3
- 1
- 2
- 3
Fragment与Fragment传值
activity给fragment传值你回了,fragment给activity传值你也会了。那么这个问题就不要问我了!!!
Fragment切换动画
Fragment的切换动画可以使用系统的标准动画,也可以自定义动画。
使用系统的需要用到setTransition(),但是只能设置系统提供的有限的动画效果。
FragmentTransaction.TRANSIT_FRAGMENT_OPEN
FragmentTransaction.TRANSIT_FRAGMENT_CLOSE
FragmentTransaction.TRANSIT_FRAGMENT_FADE
自定义动画需要用到的类:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
注意:
setCustomAnimations()必须在add()、remove()、replace()调用之前设置,否则不起作用。
比如:有两个fragment A和B,从A切换到B的时候
@AnimRes int enter
表示Fragment B的进入动画@AnimRes int exit
表示Fragment A的退出动画@AnimRes int popEnter
表示当从B界面pop回到A时,Fragment A的进入动画@AnimRes int popExit
表示当从B界面pop回到A是,Fragment B的退出动画
如果使用add的方式显示下一个fragment,则只会触发enter 和 popExit动画,因为这种情况下A并没有被移除,只是触发了与B相关的动画。
比如:
从TabFragment1使用add()方式显示TabFragment2:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4个动画都是使用的简单的view动画,用属性动画可以做出更加绚丽的动画:
slide_in_from_right.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
slide_out_to_left.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
slide_in_from_top.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
slide_out_to_bottom.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
效果图:
如果采用的replace的方式,则会正常的触发4个动画。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这里只介绍了setCustomAnimations()的用法,setTransition()方式的动画很简单,就不介绍了。
目录(?)[-]
- Fragment
- fragment生命周期
- fragment的使用
- Fragment的事务管理
- Fragment之间的切换
- Fragment与Activity之间传值
- Fragment与Fragment传值
- Fragment切换动画
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/50933621
Fragment
还是先来基本介绍。
Fragment –> 片段。
在Android3.0的时候被引入,它的出现主要是给大屏幕设备提供更加灵活的UI支持。通过对Activity布局进行分片,更加方便的对每块进行独立控制。这些片段可以被不同的activity复用。
fragment生命周期
每个fragment拥有自己的生命周期,但是fragment要依赖于activity存在,生命周期受到包括它的activity的生命周期控制。
来两张神图~~
左图就是fragment的生命周期图。右图是fragment与activity各自生命周期的对照。
介绍一下常用的几个生命周期函数:
onAttach(Context) –> 当fragment被绑定到activity上时回调
onCreate(Bundle) –> 当fragment对象创建的时候回调,一般在此方法里做参数接收。
onCreateView(LayoutInflater, ViewGroup, Bundle) –> 创建fragment视图时回调
onDestoryView –> 视图销毁时回调
onDestory –> 销毁fragment时回调
onDetech() –> fragment与activity失去关联时回调
fragment的使用
使用fragment可以当成一个控件,直接放到activity布局文件里;也可以在代码里面动态的添加、更新或者删除。
下面的activity布局文件中定义了一个fragment和一个frameLayout。使用标签可以称之为静态的Fragment,在activity创建的时候也会去创建并显示它,而framelayout是一个容器,我们在代码中可以动态的添加一个fragment进去。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
注意:
使用标签显示Fragment的时候,需要对这个fragment设置一个id或者tag,否则会出现”Error inflating class fragment”错误。
- 1
- 1
Fragment的子类继承的时候,如果你的minSdkVersion <= 11,需要引入V4包,然后倒入android.support.v4.app.Fragment包。如果是大于11,直接导入android.app.Fragment包即可。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
动态的添加fragment就需要在代码里面通过FragmentManager等类进行操作:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
Fragment的事务管理
android里通过FragmentManager类进行管理fragment,一组对fragment的操作(添加、删除、替换等)称为一个事务,通过FragmentTransaction类来提交执行。也可以把事务添加到回退栈中,进行回滚。这有点类似于数据库的事务机制。
注意:
事物操作最后必须调用commit()才能执行。
调用commit()方法之后,也不是立刻执行;如果需要立刻执行,可以使用executePendingTransactions()方法。
一次性add多个fragment,显示的是最后一个。
任务栈回退针对的是事务,而不是fragment。一次事务操作过程中可以有很多个对fragment的操作。
只能在activity处于可保存状态的情况下,进行事务操作。否则引发如下异常:
- 1
- 1
比如,在onPause()或者onStop()中提交事务,就会出现以上问题,如果非要在这些生命周期里面进行事务提交,请使用FragmentTransaction类的commitAllowingStateLoss()方法,允许状态丢失。
- 如果activity继承的是AppCompatActivity,onBackPressed()回调函数里面是利用的V4包的getSupportFragmentManager()进行的栈回退,所以做fragment回退的时候需要注意引用的是不是V4包的Fragment类。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
Fragment之间的切换
Fragment的切换就是基本就是利用add()、hide()、show()、replace()这四个方法。
情况一:采用add方式切换fragment
activity:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
TabFragment1代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
TabFragment2代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
此时都是采用add的方式进行显示fragment。每次都会把添加fragment的事务叠加到回退栈上面。
在TabFragment1界面点击按钮添加TabFragment2界面,然后在按返回键回退,打印出生命周期如下:
情况二:采用replace的方式切换fragment
activity代码不变。
TabFragment1的代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
TabFragment1切换到TabFragment2的时候,使用的replace方法。replace方法的作用是remove掉所有添加到相同id的容器里的fragment,然后添加参数里的fragment。所以会回调TabFragment1的onDestoryView()方法,等到从TabFragment2返回的时候,去执行replace事务的相反操作,也就会重新创建TabFragment1的视图,回调onCreateView()方法。
remove:
我们在TabFragment2界面中调用remove方法,把TabFragment1移除掉。
TabFragment1.java:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
TabFragment2.java:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
activity:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
从代码里看到,remove操作的事务没有添加到回退栈中,所以从TabFragment2中返回的时候,直接退到了activity界面。
但是从界面来看,从TabFragment2会退到activity之后,再次按返回键并没有退出activity,然后再按返回键的时候才会退出activity。原因就是,虽然remove了TabFragment1,但是只是回调了onDestoryView()方法销毁了视图,此时TabFragment1的对象资源和与activity的关联还没有断开。所以点击返回键的时候会有一个没有“响应”。
下面看看我们把reomve()操作添加到回退栈的情况:
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
与上面的情况相比,多了TabFragment1的onCreateView()这一步。这是因为把remove事务添加到了任务栈,回退的时候逆向执行该操作。
使用replace()方法和remove()方法会导致视图销毁,所以,切换fragment的时候,如果需要视图保留视图,就不能用这两个方法。
Fragment与Activity之间传值
fragment –> activity 99%的做法都是通过接口回调来做的。定义一个接口,activity中实现此接口方法,在fragment里面调用接口方法
activity –> fragment 通过findFragmentById()后者findFragmentByTag()方法获取fragment实例调用fragment里的public方法即可。
接着往下看~~
TabFragment2调用接口方法:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
activity实现该接口的方法:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
在TabFragment1中定义方法供activity调用:
- 1
- 2
- 3
- 1
- 2
- 3
Fragment与Fragment传值
activity给fragment传值你回了,fragment给activity传值你也会了。那么这个问题就不要问我了!!!
Fragment切换动画
Fragment的切换动画可以使用系统的标准动画,也可以自定义动画。
使用系统的需要用到setTransition(),但是只能设置系统提供的有限的动画效果。
FragmentTransaction.TRANSIT_FRAGMENT_OPEN
FragmentTransaction.TRANSIT_FRAGMENT_CLOSE
FragmentTransaction.TRANSIT_FRAGMENT_FADE
自定义动画需要用到的类:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
注意:
setCustomAnimations()必须在add()、remove()、replace()调用之前设置,否则不起作用。
比如:有两个fragment A和B,从A切换到B的时候
@AnimRes int enter
表示Fragment B的进入动画@AnimRes int exit
表示Fragment A的退出动画@AnimRes int popEnter
表示当从B界面pop回到A时,Fragment A的进入动画@AnimRes int popExit
表示当从B界面pop回到A是,Fragment B的退出动画
如果使用add的方式显示下一个fragment,则只会触发enter 和 popExit动画,因为这种情况下A并没有被移除,只是触发了与B相关的动画。
比如:
从TabFragment1使用add()方式显示TabFragment2:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4个动画都是使用的简单的view动画,用属性动画可以做出更加绚丽的动画:
slide_in_from_right.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
slide_out_to_left.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
slide_in_from_top.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
slide_out_to_bottom.xml
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
效果图:
如果采用的replace的方式,则会正常的触发4个动画。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这里只介绍了setCustomAnimations()的用法,setTransition()方式的动画很简单,就不介绍了。
- Fragment的基本应用
- Fragment的基本应用
- Fragment的基本应用
- Fragment基本应用
- Fragment基本应用(一)
- Fragment基本应用(二)
- Fragment的基本使用
- Fragment的基本内容
- Fragment的基本使用方法
- fragment的基本用法
- Fragment的基本使用
- Fragment的基本概述
- Fragment的基本概述
- Fragment的基本使用
- Fragment应用的介绍
- Fragment应用的介绍
- Fragment的相关应用
- Fragment的应用
- 彩笔笔记2016/12/5——改写equals
- 【玩转SQLite系列】(七)打造轻量级ORM工具类SQLiteDbUtil操作数据库
- 浅谈 Scala 中下划线的用途
- RabbitMQ第一个案例:hello world
- Appium环境配置-1
- Fragment的基本应用
- js判断是否是Json对象
- springMVC接收表单传来的file,并上传
- tab栏切换案例
- Servlet详解(二):request和response对象
- git 生成ssh key及使用过程
- linux内核优化
- list的addAll出现空指针问题
- Java内存分配与垃圾回收(一)