Activity之Fragment

作者: 拨云见日aaa | 来源:发表于2019-09-28 20:25 被阅读0次

一、Fragment生命周期

Fragment的生命周期

Fragment的生命周期和Activity的生命周期非常像,比Activity多了onAttach()、onCreateView()、onActivityCreate、onDestroyView、onDetach方法

  • onAttach方法是在和Activity建立连接的时候调用的,并返回绑定的Activity,一般可以做像this.mActivity=activity操作
  • onCreateView当Fragment加载布局时候用的
    -onActivityCreate是当托管的Activity的被创建的时候被调用的
  • onDetroyView销毁视图的时候会被调用,但是此时还未和Activity解除绑定,可通过onCreateView恢复,一般是在ViewPager+Fragment的时候使用。
  • onDetach当与Activity解绑的时候使用

Fragment的生命周期是由Activity的FragmentManager的管理的并不是由系统管理的

推荐阅读Fragment不为人知的细节

二、静态加载Fragment

(1)用法简介
  • 继承Fragment类,可以重写onAttach,onCreate,onCreateView等方法
  • 在Activity的布局文件中声明自己定义的Fragment
(2)代码示例

Fragment代码

public class AFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle saveInstanceState){
     View view=inflater.inflate(R.layout.a_fragment_layout,parent);
     return view;
    }
}

布局文件代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center|top"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:id="@+id/a_fragment"
        android:name="com.jty.myapplication25.AFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>
运行结果
静态加载

三、动态加载

(1)用法说明
  • 继承Fragment类,实现onAttach,onCreate,onCreateView等方法
  • 通过getSupportFragmentManger获取FragmentManager对象
  • 通过LayoutManager的beginTranscation获取FragmentTransaction对象
  • 通过FragmentTransaction对象的add方法加载Fragment,replace方法切换Fragment,需要传进去父容器的id和Fragment的对象
    -可以通过FragmentTransaction的addToBackFragment()方法允许通过返回键返回上一个Fragment
  • 最后一定要调用Fragment Transaction的commit方法
(2)代码示例

AFragment(BFragment一样)

public class AFragment extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle saveInstanceState){
        View view=inflater.inflate(R.layout.a_fragment_layout,null);
        return view;
    }
}

Activity中的代码

public class MainActivity extends AppCompatActivity {
    FragmentTransaction transaction;
    FragmentManager manager;
    private static final String A_FRAGMENT="1";
    private static final String B_FRAGMENT="2";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        manager=getSupportFragmentManager();

}
    public void click1(View v){
        transaction=manager.beginTransaction();
        Fragment fragment=manager.findFragmentByTag(A_FRAGMENT);
        if(fragment==null){
         fragment=new AFragment();
         transaction.replace(R.id.parent1,fragment,A_FRAGMENT);
         transaction.commit();
     }
    }
    public void click2(View v){
        transaction=manager.beginTransaction();
        Fragment fragment=manager.findFragmentByTag(B_FRAGMENT);
        if(fragment==null){
            fragment=new BFragment();
            transaction.replace(R.id.parent1,fragment,B_FRAGMENT);
            transaction.commit();
        }
    }
}
运行效果
点击AFragment按钮切换到AFragment

四、Fragment+ViewPager

几篇讲解:

相关文章

网友评论

    本文标题:Activity之Fragment

    本文链接:https://www.haomeiwen.com/subject/pycauctx.html