frgment 是什么?
碎片(Fragment)是一种可以嵌入在活动当中的UI片段,也可以看成是一个小型的 Activity ,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛。
生命周期
转自:https://blog.csdn.net/wuyuxing24/article/details/78698633
Activity 绑定 fragment 的方法:
- Activity里面动态启动 ( 实例化碎片、获取FragmentManager、开启一个事务、向容器里添加或替换碎片、提交事务)
public class MainActivity extends AppCompatActivity {
private FragmentManager fragmentManager;
private FragmentTransaction transaction;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
replaceFragment(new MyFragment()); //实例化碎片
}
private void replaceFragment(Fragment fragment) {
// 获取FragmentManager,在活动中可以直接通过调用getFragmentManager()方法得到
fragmentManager = getSupportFragmentManager();
// 开启一个事务,通过调用beginTransaction()方法开启
transaction = fragmentManager.beginTransaction();
//向容器内添加或替换碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例
transaction.replace(R.id.fr_container, fragment); //fr_container不能为fragment布局,可使用线性布局相对布局等。
//使用addToBackStack()方法,将事务添加到返回栈中,填入的是用于描述返回栈的一个名字
transaction.addToBackStack(null);
//提交事物,调用commit()方法来完成
transaction.commit();
}
}
- xml布局文件绑定 Fragment
在xml文件中声明name属性,找到对应的Fragment.class
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/daily_task_fragment"
android:name="com.example.z.mydaily.DailyTaskFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
Fragment的使用
转自:https://blog.csdn.net/wuyuxing24/article/details/78698633
在Fragment使用之前,有三几个特别重要的类要先来了解下:FragmentManager、FragmentTransaction、FragmentManager.BackStackEntry。
- FragmentManager:FragmentManager是负责管理Fragment并将它们的视图添加到Activity视图层级结构中的一个管理类。
FragmentManage可以做那些事情:
- 通过 findFragmentById()(对于在 Activity 布局中提供 UI 的片段)或 findFragmentByTag()(对于提供或不提供 UI 的片段)获取 Activity 中存在的片段。
- 通过 popBackStack()(模拟用户发出的返回命令)将片段从返回栈中弹出。
- 通过 addOnBackStackChangedListener() 注册一个侦听返回栈变化的侦听器。
- 开启一个事务。
- FragmentTransaction:所有对Fragment的动态操作都是通过FragmentTransaction事务来提交执行。FragmentTransaction是一个事物(事务是在同一时刻执行的一组动作,很像数据库中的事务)。你可以用add(),remove(),replace()等方法构成事务,最后使用commit()方法提交事务。在调用commint()之前,你可以用addToBackStack()把事务添加到一个后退栈中,这个后退栈属于所在的Activity。有了它,就可以在用户按下返回键时,返回到Fragment们执行事务之前的状态。
FragmentTransaction中对Fragment的操作大致可以分为三类:
- 显示操作:add()、 replace()、 show()、 attach()。
- 隐藏操作:remove() 、hide() 、detach()。
- 添加回退栈:addToBackStack()。