Fragment学习笔记

fragment是什么

fragment故名思意是碎片的意思,fragment必须依附在activity上,一个activity可以由多个fragment组成,fragment就相当于一个依附在activity上层的一个子布局,它可以加载自己的布局文件,activity可以动态地加载,替换,移除,隐藏,显示fragment

fragment生命周期

fragment有自己的生命周期,但它的生命周期依赖于它所依附的那个activity的生命周期,fragment可以接受处理用户事件,可以把平时写在activity中的事件处理剥离到fragment类中。

图片来自http://blog.csdn.net/lmj623565791/article/details/37970961
简单描述一下fragment的加载过程:
1.activity先完成created,然后就转到fragment生命周期的created阶段了,然后回调onAttach()一系列回调方法,
然后转到activity中,回调onStrat(),再回掉fragment 同一生命周期阶段的回调,到最后fragment显示出来。

2.加载的过程是先完成activity的回调,再去完成fragment的回调,销毁的过程则相反。比如,销毁带有fragment的activity时,先回调fragment的onPaus()方法,再到activity的。

3.当一个fragment被动态remove或者replace时,执行到onDestroyView时,如果fragment添加了回退栈,则fragment就会被添加的回退栈中,如果没有回退栈,fragment对象则会被销毁。从回退栈中弹出来重新显示的fragment是从生命周期的onActivityCreate处开始往下执行的。

4.重写fragment生命周期方法时,出了onCreateView,其它的都要调用其父类实现。

5.onAttach()是activity与fragment关联的时候调用,onCreateView是加载fragment的布局,onActivityCreate是确定与fragment关联的activity一定已经创建完毕。

fragment的使用

1.在activity的xml文件中像添加普通控件一样添加fragment,
并为fragment控件的android:name属性绑定一个类A。

2.类A继承于Fragment,重写onCreateView加载fragment的布局。
activity的xml布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
 tools:context="com.example.yan.mynews.MainActivity"
    <fragment
        android:id="@+id/frg"
        android:name="com.example.yan.mynews.A"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

fragment中加载的布局文件ft.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/news_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

A类:

public class A extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.ft, container, false);
        return view;
    }
}

主activity:

public class MainActivity extends Activity {

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

经历以上几步,一个fragment就会显示出来了。

fragment的管理

1.如果需要动态移除,添加fragment,则需要开启fragment的事务管理。

        //获取frgment的管理器
        FragmentManager fm = getFragmentManager(); 
        //开启一个事务 
        FragmentTransaction transaction = fm.beginTransaction();  
        newf = new ContentFragment();
        //使用另一个frgment newf 加载到指定id位置
        transaction.replace(R.id.id_content, mWeixin);  
        //提交事务
        transaction.commit();

2.把fragment添加的回退栈,是摁back键的时候显示上一个fragment。则需要在commit之前,写transction.addToBackStack(Stirng);

fragment与activity之间的通信

1.在fragment中,使用getActivity()可以获得与此fragment关联的activity对象,
注:如果在Fragment中需要Context,可以通过调用getActivity(),如果该Context需要在Activity被销毁后还存在,则使用getActivity().getApplicationContext()。

2.在activity中,使用getFragmentManager.findFragmentByTag()或者findFragmentById()获得任何Fragment实例,然后进行操作。

参考文章http://blog.csdn.net/lmj623565791/article/details/37970961

参考文章http://blog.csdn.net/lmj623565791/article/details/37992017

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值