写在前面的话
1、主要参考自:https://b23.tv/9q3R75
2、内容如果有不对的,希望可以指出或补充。
3、新知识。
一、概述
Fragment(碎片):主要是为了提高页面间的切换效率。是一种(必须)嵌入在Activity中
的UI片段,与Activity非常相似,不仅包含布局,同时也具有自己的生命周期,但受Activity的生命周期所影响,也就是说Activity停止的时候,Activity中所有的Fragment都会被停止。一个Activity可以有多个Fragment,一个Fragment可以被多个Activity重用。
使用Fragment可以把屏幕划分成几块,然后进行分组,进行模块化管理。
建议一个App使用一个Activity包含多个Fragment的形式来实现。
生命周期(转↓):
一般,至少需要实现这几个生命周期方法:onCreate()、onCreateView()、onPause()
二、创建
注意:因为Fragment是Android3.0版本后引入的,所以minSdk需要大于11。
1、基于模板创建-Fragment类、fragment布局(fragment显示内容的)
在Activity(活动)存在的前提中。
弹出的窗口。
2、创建
在Activity中使用Fragment时,可以通过两种方式(一种是通过布局文件、一种是通过代码)
将Fragment添加到Activity中。
静态加载一旦添加就不能在运行时删除。
① 在activity布局文件里声明fragment-静态
② 通过java代码将fragment添加到对应布局中-动态
三、测试-滑动切换界面
功能:实现三个界面进行滑动切换。
1、【基于模板创建】三个Frament(Fragment1和fragment_1、Fragment2和fragment_2、Fragment3和fragment_3),其中布局如下(其余两个同理)。
2、在主布局中设置如下。
3、MainActivity.java
package com.example.testfragment;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<Fragment> fragmentList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件
ViewPager viewPager = findViewById(R.id.viewpager);
//使用ViewPager需要适配器
//创建集合
fragmentList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
fragmentList.add(new Fragment1());
fragmentList.add(new Fragment2());
fragmentList.add(new Fragment3());
}
//适配器
//getSupportFragmentManager碎片管理器
FragAdapter adapter = new FragAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
}
public class FragAdapter extends FragmentPagerAdapter{
public FragAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);//到集合中获取到数据
}
@Override
public int getCount() {
return fragmentList.size();
}
}
}
4、效果如下