Fragment创建
- 为fragment创建一个布局
- 定义一个类继承fragment
- 重写oncreatView方法
定义Fragment类
Frament.java
public class MyFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = View.inflate(getContext(), R.layout.fragment_layout, null);
return view;
}
}
fragment_layout.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">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is a Fragment"/>
</LinearLayout>
直接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">
<fragment
android:id="@+id/one_frament_one"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.godc.fragmenttest.MyFragment"/>
</LinearLayout>
在Java代码中引进
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
MyFragment myFragment = new MyFragment();
/* *
*参数1:Fragment容器id
* 参数2:Fragment
* 参数3:给添加的Fragment设置标签名
*/
transaction.add(R.id.one_frament_one, myFragment, "FragmentB");
transaction.commit();
效果
总结
Fragment生命周期
生命周期方法介绍
方法 | 含义 |
---|---|
onAttach() | 当Fragment和活动建立关联的时候调用 |
onCreate() | 当Fragment被建立的时候调用 |
onCreateView() | 为Fragment创建视图时调用 |
onActivityCreated() | 与Fragment相关联的活动已经创建完毕时调用 |
onDestroyView() | 当Fragment管理的视图被移除的时候调用 |
onDetach() | 当Fragment和活动解除关联的时候调用 |
FragmentTransaction方法汇总
方法 | 含义 | 生命周期调用 |
---|---|---|
add(id, fragment) | 添加一个fragment到队列 | 一个fragment不可添加两次 |
show(fragment) | 添加一个fragment | 队列中不存在该fragment时,回调onAttach()、onCreate()。当队列中存在该fragment时并被调用过hide(fragment)时,回调onHiddenChange(boolean)。其他情况没有回调函数。 |
replace(id,fragment) | 队列中已经存在会崩溃,不存在会进入队列并把其他fragment清出队列,最后显示该fragment到指定布局中。 | 同add(id, fragment) |
remove(fragment) | 销毁队列中指定的fragment | 当队列中不存在该fragment时,不会有任何反应。当队列中存在该fragment时,fragment的生命周期执行情况主要依赖是否当前fragment进入到返回栈。 |
hide(fragment) | 隐藏队列中指定的fragment,相当于调用视图的.setVisibility(View.GONE) | 当队列中存在该fragment时,回调onHiddenChange(boolen)当队列中不存在该fragment时,回调onAttach()、onCreate()、onHiddenChange(boolen)。 |
detach(fragment) | 销毁指定frament的视图,并且该fragment的onCreateVieew(……)不能再被调用(除非调用attach(fragment)重新连接) | 当队列中存在该fragment时,回调onDestroyView()当队列中不存在该fragment时,回调onAttach()、onCreate()。 |
attach(fragment) | 创建指定fragment的视图。标识该fragment的onCreateView(……)能被调用。 | 当队列中存在该fragment时且被调用detach(fragment)时,回调createView()、onActivityCreated()、onResume()。当队列中不存在该fragment时,回调onAttach()、onCreate()。 |
addToBackStack(string) | 使本次事务增加的fragment进入当前activity的返回栈中。当前参数是对返回栈的描述,没什么实际用途。传入null即可。 | |
commit() | 提交本次事务,可在非主线程中被调用。主要用于多线程处理情况。 | |
commitNow() | 提交本次事务,只在主线程中被调用。 这时候addToBackStack(string)不可用。 |