一、概述
Fragment是Android3.0新增的组件,表示应用界面中可重复使用的一部分。
- fragment 不能独立存在,必须由 activity 或其他 fragment 托管;(界面与子界面)
- fragment 定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件;
- fragment 的视图层次结构会成为宿主的视图层次结构的一部分,或附加到宿主的视图层次结构;
- fragment 本质上会产生一个FrameLayout容器,它加载的布局为其子布局
模块化
二、Fragment使用
设置环境:settings.gradle 、build.gradle
dependencies {
val fragment_version = "1.5.7"
// Kotlin
implementation("androidx.fragment:fragment-ktx:$fragment_version")
}
(一)创建
系统创建:
手动创建:
(二)加载
1.静态加载(xml中):
在Activity.xml中添加Fragment
2.动态加载(Activity中)
(1)创建Fragemnt类 和 对应的xml文件
2) 在 Activity 中使用 Fragment
- 在 Activity 布局文件中,添加FrameLayout 用于显示Fragment 的容器
- 在 Activity 的代码中,使用 FragmentManager 加载和管理 Fragment
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取FragmentManager
FragmentManager FragmentManager = getSupportFragmentManager();
//开启事务:fragmentTransaction
FragmentTransaction fragmentTransaction =
FragmentManager.beginTransaction();
//创建fragment对象
MyFragment myfragment = new MyFragment();
//将myfragment放到容器中
fragmentTransaction.replace(R.id.fragment_container,myfragment);
//提交事务
fragmentTransaction.commit();
}
三、demo【微信底部导航切换】
准备
4个Fragement切换
1.创建List装载4个Fragment,并默认首页
List<Fragment> list = new ArrayList<>();
list.add(new WeChatFragment());
list.add(new AddressFragment());
list.add(new FindFragment());
list.add(new MeFragment());
//默认首页
showFragment(list.get(0));
2.showFragemnt()
public void showFragment(Fragment fragment) {
//获取FragmentManager+开启事务 合并写
FragmentTransaction fragmentTransaction =
getSupportFragmentManager().beginTransaction();
//将fragment放到容器中
fragmentTransaction.replace(R.id.fragment_container, fragment);
//提交事务
fragmentTransaction.commit();
}
}
3.实现切换(通过底部导航栏)
bottom_navigation是底部导航栏的id
bottom_navigation.setOnItemSelectedListener
(new NavigationBarView.OnItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.menu_wechat:
showFragment(list.get(0));
break;
case R.id.menu_address:
showFragment(list.get(1));
break;
case R.id.menu_find:
showFragment(list.get(2));
break;
case R.id.menu_me:
showFragment(list.get(3));
break;
}
return true;
}
});