Android -- Fragment注意事项

简介:

ViewPager+Fragment                                                                

让Fragment成为ViewPager的一页时,FragmentManager会一直保存管理创建好了的Fragment,即使当前不是显示的这一页,Fragment对象也不会被销毁,在后台默默等待重新显示。但如果Fragment不再可见时,它的视图层次会被销毁掉,下次显示时视图会重新创建。

出于使用FragmentPagerAdapter  时,Fragment对象会一直存留在内存中,所以当有大量的显示页时,就不适合用FragmentPagerAdapter 了,FragmentPagerAdapter  适用于只有少数的page情况,像选项卡。这个时候你可以考虑使用FragmentStatePagerAdapter ,当使用FragmentStatePagerAdapter  时,如果Fragment不显示,那么Fragment对象会被销毁,但在回调onDestroy()方法之前会回调onSaveInstanceState(Bundle outState)方法来保存Fragment的状态,下次Fragment显示时通过onCreate(Bundle savedInstanceState)把存储的状态值取出来,FragmentStatePagerAdapter  比较适合页面比较多的情况,像一个页面的ListView。

动画                                                                                    

1 FragmentTransaction ft = getFragmentManager().beginTransaction(); 
2 ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
3 ft.replace(R.id.details, detail);        
4 ft.addToBackStack(null); 
5 ft.commit();

代码设置的fade(渐变)效果。

复制代码
1 FragmentTransaction ft = getFragmentManager().beginTransaction();
2 //setCustomAnimations()必须位于replace()之前,否则效果不起所中。它的两个参数分别为enter,exit的效果。系统目前提供两个效果,分别为android.R.animator.fade_in和android.R.animator.fade_out
3 ft.setCustomAnimations(R.animator.slide_in_left,R.animator.slide_out_right);
4 ft.addToBackStack(null);
5 ft.replace(R.id.details,"detail");
6 ft.commit();
复制代码

利用setCustomAnimations()

无参构造函数&传参数                                                                

fragment一定要有一个无参构造函数,如果要给fragment传参,一定要使用Bundle方式传参,而不重载构造函数传参,因为在fragment重新生成的使用不会执行这个带参构造函数,而是执行无参构造函数。

复制代码
 1 public static VechileFrag newInstance(Vehicle vehicle, String userId, boolean isAdd) {
 2     VechileFrag mf = new VechileFrag();
 3     Bundle args = new Bundle();
 4     args.putString("userId", userId);
 5     args.putBoolean("isAdd", isAdd);
 6     args.putParcelable("vehicle", vehicle);
 7     mf.setArguments(args);
 8     return mf;
 9 }
10 
11 
12 @Override
13 public void onCreate(Bundle savedInstanceState) {
14     super.onCreate(savedInstanceState);
15     Bundle args = getArguments();
16     if (args != null) {
17         userId = args.getString("userId");
18         isAdd = args.getBoolean("isAdd");
19         vehicle = args.getParcelable("vehicle");
20         if (vehicle == null) {
21             vehicle = new Vehicle();
22         }
23     }
24 }    
复制代码

Menu                                                                                   

1 @Override
2     public void onCreate(Bundle savedInstanceState) {
3         super.onCreate(savedInstanceState);
4         setHasOptionsMenu(true);
5     }

这样之后,就可以调用onCreateOptionsMenu了。

保存Fragment的切换                                                                 

复制代码
Fragment fragment = fragments.get(i);
if(!fragment.isAdded()) {
    if(currentIndex!=-1)
    fragments.get(currentIndex).onPause();
    ft = fm.beginTransaction();
    ft.setTransition(android.support.v4.app.FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.add(R.id.framelayout,fragment);
    // ft.addToBackStack(null);
    ft.commit();
    currentIndex=i;
}
else
{
    ft = fm.beginTransaction();
    fragments.get(currentIndex).onPause();
    ft.setTransition(android.support.v4.app.FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.hide(fragments.get(currentIndex));
    ft.show(fragments.get(i));
    fragments.get(i).onStart();
    ft.commit();
    currentIndex=i;
}
复制代码

 

我是天王盖地虎的分割线              




本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/4075062.html,如需转载请自行联系原作者

相关文章
|
XML Android开发 数据格式
Android -- Fragment动态注册
Android -- Fragment动态注册
95 0
|
3月前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
33 3
|
6月前
|
Android开发
Android面试题之自定义View注意事项
在Android开发中,自定义View主要分为四类:直接继承View重写onDraw,继承ViewGroup创建布局,扩展特定View如TextView,以及继承特定ViewGroup。实现时需注意:支持wrap_content通过onMeasure处理,支持padding需在onDraw或onMeasure/onLayout中处理。避免在View中使用Handler,使用post系列方法代替。记得在onDetachedFromWindow时停止线程和动画以防止内存泄漏。处理滑动嵌套时解决滑动冲突,并避免在onDraw中大量创建临时对象。
68 4
|
8月前
|
XML 存储 Android开发
Android技能树 — Fragment总体小结,2024年最新腾讯面试gm
Android技能树 — Fragment总体小结,2024年最新腾讯面试gm
|
8月前
|
XML Android开发 数据格式
Fragment的使用,零基础入门android逆向视频课程
Fragment的使用,零基础入门android逆向视频课程
|
8月前
|
Android开发
Android基础知识:什么是Fragment?与Activity的区别是什么?
Android基础知识:什么是Fragment?与Activity的区别是什么?
1408 54
|
8月前
|
XML Java Android开发
Android Studio App开发之碎片Fragment的讲解及实战(附源码 包括静态和动态注册)
Android Studio App开发之碎片Fragment的讲解及实战(附源码 包括静态和动态注册)
429 1
|
8月前
|
Android开发 Kotlin
android开发,使用kotlin学习Fragment
android开发,使用kotlin学习Fragment
154 0
|
Java 程序员 Android开发
C++ 程序员,安卓开发注意事项
C++ 程序员,安卓开发注意事项
|
Android开发 容器
Android上机实验-6 Fragment的使用
Android上机实验-6 Fragment的使用
132 1