一、前言

Fragment 是从 Android 3.0 开始引入的,翻译过来就是碎片的意思。Fragment 的作用以及使用场景我就不赘述了。这篇博文我们就主要讲 Fragment 的创建、替换与移除这三个操作,至于 Fragment 的生命周期、如何与 Activity 进行通信等内容我们会在后面陆续讲到的。

一、Fragment 的创建

要使用 Fragment,可以通过继承 Fragment 类来创建 Fragment,在多数情况下我们需要给 Fragment 定制一个 UI,但是,也可以为 Activity 创建一个没有 UI,只提供后台行为的 Fragment。Fragment 的创建一般有两种方式:通过 xml 标签创建,即静态添加 Fragment;

通过 java 代码动态创建,即动态添加 Fragment。

1.1、通过 xml 标签静态添加 Fragment(不常用)在 IndexActivity 的 activity_index 布局中加入 fragment 标签,并通过 name 关联到相应的 Fragment;<?xml version="1.0" encoding="utf-8"?>

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".IndexActivity">

android:id="@+id/fragment_center"

android:name="com.zjgsu.fragmentdemo.fragment.CenterFragment"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="5" />

android:id="@+id/fragment_bottom"

android:name="com.zjgsu.fragmentdemo.fragment.BottomFragment"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1" />

创建 CenterFragment;public class CenterFragment extends Fragment {

@Nullable

@Override

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_center, container, false);

return view;

}

}

创建 BottomFragment;public class BottomFragment extends Fragment {

@Nullable

@Override

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_bottom, container, false);

return view;

}

}

然后我们启动 IndexActivity 就可以看到效果了。

1.2、通过 Java 代码动态添加 Fragment动态添加 Fragment 则不需要在 IndexActivity 的 activity_index 布局中加入 fragment 标签;<?xml version="1.0" encoding="utf-8"?>

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".IndexActivity">

android:id="@+id/layout_center"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="5" />

android:id="@+id/layout_bottom"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1" />

动态添加 Fragment 主要涉及 FragmentManager 和 FragmentTransaction 这两个操作对象。public class IndexActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_index);

/*

动态添加 Fragment 到 Activity 中

要涉及到两个操作对象

FragmentManager 和

FragmentTransaction

*/

FragmentManager fragmentManager = getSupportFragmentManager();

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

fragmentTransaction.add(R.id.layout_center, new CenterFragment());

fragmentTransaction.add(R.id.layout_bottom, new BottomFragment());

fragmentTransaction.commit();

}

}

二、Fragment 的替换与移除

Fragment 的替换与移除也都是通过 FragmentManager 和 FragmentTransaction 来完成的。

我们先来看下效果:

具体代码如下所示public class Index2Activity extends AppCompatActivity implements View.OnClickListener {

private Button btnReplace;

private Button btnRemove;

private FirstFragment f1;

private SecondFragment f2;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_index2);

initView();

}

// 初始化 View

private void initView() {

btnReplace = findViewById(R.id.btn_replace);

btnRemove = findViewById(R.id.btn_remove);

btnReplace.setOnClickListener(this);

btnRemove.setOnClickListener(this);

initFragment();

}

// 初始化 Fragment

private void initFragment() {

f1 = new FirstFragment();

f2 = new SecondFragment();

addFragment();

}

// 添加 Fragment

private void addFragment() {

getSupportFragmentManager()

.beginTransaction()

.add(R.id.layout_container, f1)

.commit();

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_replace:

getSupportFragmentManager()

.beginTransaction()

.replace(R.id.layout_container, f2)

// 点击 返回键 可以回到原来的 Fragment

.addToBackStack(null)

.commit();

break;

case R.id.btn_remove:

getSupportFragmentManager()

.beginTransaction()

.remove(f2)

.commit();

break;

}

}

}

三、源码

源码已经上传至 github,下一篇博文我们讲 Fragment 与 Activity 之间的通信。

android移除fragment,Fragment 的创建、替换与移除相关推荐

  1. 【Android 应用开发】 Fragment 详解

    作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38064191 本博客代码地址 : -- 单一 Fragmen ...

  2. Android app包下fragment详细使用

    文章目录 前言 一.什么是Fragment? 二.Fragment与Activity的区别与优势 1.生命周期不同 2.Fragment的使用优势 三.Fragment的生命周期 四.Fragment ...

  3. Android第一行代码-Fragment

    文章目录 Fragement(碎片) Fragment的引出 碎片的使用方式(创建类继承Fragment,实现里面onCreateView方法) 动态添加碎片(静态引入使用在元素中的android:n ...

  4. Android学习——碎片(fragment)

    碎片 1.碎片是什么 2.碎片的使用方式 2.1静态加载Fragment 2.2动态添加碎片 2.3在碎片中返回栈 2.4Fragment管理与Frangment事务 2.5Fragment与Acti ...

  5. Android 点将台:撒豆成兵[- Fragment -]

    个人所有文章整理在此篇,将陆续更新收录:知无涯,行者之路莫言终(我的编程之路) Fragment(碎片) 拥有生命周期,含有视图,可视可交互的界面 . 本文源码可见此处 1.Fragment和Acti ...

  6. Android 进阶17:Fragment FragmentManager FragmentTransaction 深入理解

    日常开发中我们经常使用 Fragment 管理布局,使用起来非常方便,但是在简单的 API 背后隐藏了什么操作,很多人恐怕不了解. 如果你回答不出这些问题,那这篇文章可能就对你有些帮助: Fragme ...

  7. Android studio心得——用fragment仿微信APP

    前言 今天我想与大家分享一些关于如何利用fragment实现仿微信APP的经验.作为社交领域最受欢迎.功能齐全且可扩展性强的应用之一,微信APP在浏览器首页和个人中心之上还有一个重要部分:底部导航栏. ...

  8. Android Tab大总结 Fragment+TabPageIndicator+ViewPager

    2019独角兽企业重金招聘Python工程师标准>>> 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24740 ...

  9. android fragmentactivity fragment,Android:Activity与Fragment通信(99%)完美解决方案

    前言 最近一直在想着能否有一种更好的方案来解决:Android中Activity与Fragment之间通信的问题,什么叫更好呢,就是能让Fragment的复用性高,性能还有好(不用反射),代码还要好维 ...

最新文章

  1. 不允许 ASSIGNMENT 语句中包含 FOR XML 子句。
  2. Nginx(OpenResty)+Lua+Redis IP限流 10s内
  3. android webview 更新,Android WebView缓存没更新解决方案
  4. Matlab 训练深度学习模型函数 trainingOptions
  5. 前阿里资深运营王殿进:SaaS产品经理所面临的苦恼
  6. Java框架篇---spring aop两种配置方式
  7. Oracle优化问题
  8. 【整理总结】代码沉淀 - Caliburn.Micro - MV*模式短小精悍的框架
  9. matlab altera视频,Altera.FPGA入门及提高视频教程
  10. 数字图像处理课程设计
  11. c语言 自适应模式算术编码,算术压缩论文基于算术编码的数据压缩算法研究与实现.doc...
  12. 2021申请google开发者账号流程
  13. 让你快速了解外汇EA
  14. ⭐⭐⭐【DFS+理解题意】找出直系亲属
  15. python生成摸头GIF动态图
  16. 本周白银市场再刮超级旋风
  17. 解决win10开机内存过高的办法(亲测有效)
  18. 聊聊redis分布式锁的8大坑
  19. 多活分布式数据中心如何实现DNS域名解析和负载均衡?
  20. 游戏辅助丨手把手简单实现射击游戏逆向(1)

热门文章

  1. python自动添加微信好友_Python实现微信自动好友验证,自动回复,发送群聊链接方法...
  2. treeset可以重复吗_买了好几份意外险,可以重复理赔吗?
  3. 《论韩愈 》——陈寅恪
  4. mpvue 搭配 minui
  5. 【评测】肠道微生物核酸提取试剂盒
  6. 网络层(ip地址划分以及路由)
  7. Vue2源码解析 Object变化监听
  8. javascript 多行文本 function处理方法 及实践应用
  9. http协议及httpd配置
  10. UOS安装 MySQL5.7