Bootstrap

Android|(九)Fragment 碎片/片段

官网:Fragment  |  Android Developers

一、概述

        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;
            }
        });

;