Fragment

1.什么是​​Fragment​​、

①具备生命周期。使得它类似于一个子​​Activity​​​,具有一定的独立性。
②必须依托在Activity中才能运行。​​Fragment​​​的生命周期也受​​Activity​​管理

2.静态​​Fragment​​的简单使用

①按如图所示操作创建一个空白Fragment​​

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_安卓


②删除暂时不相关的代码,如图所示(onCreate也可以不要)

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_java_02


③然后修改创建Fragment的时候自动生成的​XML​文件

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_bundle_03

这里我将布局改成了​​LinearLayout​​​,然后加了一个​​Button​​控件(这一步是非必须的)

④注意:Fragment的布局解析不像​Activity​直接​setContentView​,而是使用布局解析器

如图

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_安卓_04


⑤然后将Fragment​Activity​一样对控件添加点击事件

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_bundle_05


⑥最后在MainActivity​xml​文件中添加​fragment​

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_bundle_06


​name​​​负责的是与我们特定的​​fragment​​​进行绑定。​​id​​​是​​fragment​​管理中必须要有的,后面看源码就明白了。

使用效果

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_bundle_07

3.动态​​Fragment​​的使用

①首先更改MainActivity的布局文件

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

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn1"
android:text="change"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn2"
android:text="replace"
/>
<FrameLayout
android:id="@+id/myFrameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
/>
</LinearLayout>

②然后在MainActivity中做如下操作

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

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

//分别得到两个按钮,然后设置点击事件
Button btn1 = findViewById(R.id.btn1);
btn1.setOnClickListener(this);
Button btn2 = findViewById(R.id.btn2);
btn2.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn1:
changeFragment(new MyFragment());
break;
case R.id.btn2:
changeFragment(new ItemFragment());
break;
}
}

private void changeFragment(Fragment fragment) {
//得到管理类
FragmentManager fragmentManager = getSupportFragmentManager();
//开始事务
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
//事务创建
fragmentTransaction.replace(R.id.myFrameLayout,fragment);
//事务提交
fragmentTransaction.commit();
}
}

值得一提的是点击事件的实现有两种方式,一种是匿名内部类的方式,还有一种就是上面代码的方式

效果示意图

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_安卓_08


③如果我们将fragment添加到管理栈中,

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_移动开发_09


在添加之前,我们按屏幕上的返回键,它直接返回到桌面,如图

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_java_10


而在我们添加之后,则是返回到栈中的栈顶​​fragment​效果如图所示

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_bundle_11

动态添加​​Fragment​​步骤总结

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_bundle_12

4.​​Activity​​​与​​Fragment​​的通信

(1)Android原生方案:​​Bundle​

Bundle可以理解成是一个能储存数据的类

①首先创建​​Bundle​​,并保存数据

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_安卓_13


②然后在相应的​​Fragment​​中得到数据

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_移动开发_14


注意:并不是​​onCreateView​​​函数的​​Bundle​​​参数,而是自己创建一个​​Bundle​​​得到的从​​Activity​​传来的数据

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_bundle_15

(2)接口方案,​​Java​​语言内部有的

①首先定义接口

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_android_16


②然后在相应的​​Fragment​​类中进行如下操作

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_安卓_17


③然后在​​Activity​​中

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_android_18


效果

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_安卓_19


上面是往​​Activity​​​中发送消息,如果从​​Activity​​中接收消息,则是

④在我们的​​Fragment​​中做如下操作

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_安卓_20


⑤然后在​​Activity​​中做如下操作

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_java_21


效果

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_android_22


这种思想,说白了就是在​​Fragment​​​中调用接口的方法,实际上执行了​​Activity​​​中重写的那个方法,而且参数也传到​​Activity​​中的那个方法中去了。类似于点击事件

其他方式:​​eventBus​​​,​​LiveData​​(观察者模式

5.Fragment生命周期

首先看一张图,它代表了​​Fragment​​的生命周期

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_bundle_23


解释:

①​​onAttach​​​和​​onDetach​​​就是解决​​Fragment​​​与​​Activity​​​的绑定问题。之前说过​​Fragment​​​要依托于​​Activity​​​而存在,所以这两个方法就实现了​​“绑定”​​​和​​“解除绑定”​​的问题

②​​onCreate​​​和​​onDestroy​​​就是​​Fragment​​​的创建和销毁。有时会进行​​Bundle​​的解析

③​​onCreateView​​进行UI的解析

④​​onActivityCreated​​​意味着​​Activity​​已经创建

几种情况

从0开始讲解Fragment和ViewPager2的结合使用(1):Fragment_android_24


关于生命周期,一两句也说不清,后面遇见的多了就慢慢会了,现在就先记住就可以!