Fragment总结

目录

1.Fragment简述
2.Fragment使用
3.Fragment与Activity交互
4.Fragment与Activity的生命周期

Fragment简述

Fragment是在Android 3.0 (API level 11)开始引入的,它能让你的app在现有基础上性能大幅度提高,并且占用内存降低,同样的界面Activity占用内存比Fragment要多,响应速度Fragment比Activty在中低端手机上快了很多,甚至能达到好几倍,"单Activity + 多Fragment架构"和"多模块Activity + 多Fragment架构"应运而生

Fragment使用

1.编写Fragment布局

创建fragment01.xml



    


2.创建Fragment的子类

通常, 应当至少实现如下的生命周期方法:
onCreate()
当创建fragment时, 系统调用该方法.
在实现代码中,应当初始化想要在fragment中保持的必要组件, 当fragment被暂停或者停止后可以恢复.
onCreateView()
fragment第一次绘制它的用户界面的时候, 系统会调用此方法. 为了绘制fragment的UI,此方法必须返回一个View, 这个view是你的fragment布局的根view. 如果fragment不提供UI, 可以返回null.
onPause()
用户将要离开fragment时,系统调用这个方法作为第一个指示(然而它不总是意味着fragment将被销毁.) 在当前用户会话结束之前,通常应当在这里提交任何应该持久化的变化(因为用户有可能不会返回).

创建Fragment01,因为例子中fragment01布局简单,所以只实现了onCreateView()

public class Fragment01 extends Fragment {
    @Override
    public View onCreateView( LayoutInflater inflater,  ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment01,container,false);
        return view;
    }
}
3.将Fragment添加到Activity中

将Fragment添加到Activity中有两种方式,一种是在在activity的layout文件中声明fragment;另一种是动态添加,下面讲动态添加方法。

动态添加Fragment时,需要在Activity的layout文件中声明一个ViewGroup。当activity运行的任何时候, 都可以将fragment添加到ViewGroup。

Activity布局文件如下:




    

Activity逻辑如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        
    }

    private void initView(){
        Button bt_fragment01 = findViewById(R.id.bt_fragment01);
        Button bt_fragment02 = findViewById(R.id.bt_fragment02);
        bt_fragment01.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Fragment01 fragment01 = new Fragment01();
                addFragment(fragment01);
            }
        });
        bt_fragment02.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            Fragment02 fragment02 = new Fragment02();
            addFragment(fragment02);
            }
        });
    }
    private void addFragment(Fragment fragment){
        //1.获取到FragmentManager,在V4包中通过getSupportFragmentManager
        //在系统中原生的Fragment是通过getFragmentManager获得的。
        android.support.v4.app.FragmentManager FM = getSupportFragmentManager();
        //2.开启一个事务,通过调用beginTransaction方法开启。
        FragmentTransaction fragmentTransaction =FM.beginTransaction();
        //3.向容器内加入Fragment,一般使用add或者replace方法实现,需要传入容器的id和Fragment的实例。使用replace可以防止fragment重叠
        fragmentTransaction.replace(R.id.fragment_container,fragment);
        //4.提交事务,调用commit方法提交。
        fragmentTransaction.commit();
    }
}

Fragment动态添加到Activity步骤:
1.获取到FragmentManager
2.开启一个事务
3.向容器内加入Fragment
4.提交事务
注意事项:
在使用fragmentTransaction.add()向容器添加fragment时,如果布局文件已经添加了fragment,再次添加,会出现重叠现象,而使用replace不会。

Fragment与Activity交互

尽管Fragment被实现为一个独立于Activity的对象,并且可以在多个activity中使用,但一个给定的fragment实例是直接绑定到包含它的activity的. 特别的,fragment可以使用 getActivity() 访问Activity实例, 并且容易地执行比如在activity layout中查找一个view的任务.

View listView =getActivity().findViewById(R.id.list); 

同样地,activity可以通过从FragmentManager获得一个到Fragment的引用来调用fragment中的方法, 使用findFragmentById() 或 findFragmentByTag().

ExampleFragment fragment (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment)

Fragment与Activity数据交互参考:
https://blog.csdn.net/chenliguan/article/details/53906934
https://www.jianshu.com/p/1b824e26105b

Fragment与Activity的生命周期

fragment所生存的activity的生命周期,直接影响fragment的生命周期,每一个activity的生命周期的回调行为都会引起每一个fragment中类似的回调.
例如,当activity接收到onPause()时,activity中的每一个fragment都会接收到onPause().
Fragment 有一些额外的生命周期回调方法, 那些是处理与activity的唯一的交互,为了执行例如创建和销毁fragment的UI的动作. 这些额外的回调方法是:
onAttach()
当fragment被绑定到activity时被调用(Activity会被传入.).
onCreateView()
创建和fragment关联的view hierarchy时调用.
onActivityCreated()
当activity的onCreate()方法返回时被调用.
onDestroyView()
当和fragment关联的view hierarchy正在被移除时调用.
onDetach()
当fragment从activity解除关联时被调用.

Fragment总结_第1张图片
Fragment生命周期

你可能感兴趣的:(Fragment总结)