实现的效果如下图

主要的代码在activity 这里贴出来了

public class ShowActvity extends AppCompatActivity implements View.OnClickListener {private HpFragment hpFragment;private FilmFragment filmFragment;private MeFragment meFragment;private TextView hpText;private TextView filmText;private TextView meText;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.show_activity_layout);hpText = findViewById(R.id.hp_text);hpText.setOnClickListener(this);filmText = findViewById(R.id.film_text);filmText.setOnClickListener(this);meText = findViewById(R.id.me_text);meText.setOnClickListener(this);initTab(0);}private void initTab(int i) {//开启事务,fragment的控制是由事务来实现的FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();hideFragments(transaction);clearSelection();switch (i) {case 0:hpText.setTextColor(Color.RED);if (hpFragment == null) {hpFragment = new HpFragment();transaction.add(R.id.content, hpFragment);} else {transaction.show(hpFragment);}break;case 1:filmText.setTextColor(Color.RED);if (filmFragment == null) {filmFragment = new FilmFragment();transaction.add(R.id.content, filmFragment);} else {transaction.show(filmFragment);}break;case 2:meText.setTextColor(Color.RED);if (meFragment == null) {meFragment = new MeFragment();transaction.add(R.id.content, meFragment);} else {transaction.show(meFragment);}break;}transaction.commitAllowingStateLoss();}private void clearSelection() {hpText.setTextColor(Color.BLACK);filmText.setTextColor(Color.BLACK);meText.setTextColor(Color.BLACK);}private void hideFragments(FragmentTransaction transaction) {if (filmFragment != null) {transaction.hide(filmFragment);}if (hpFragment != null) {transaction.hide(hpFragment);}if (meFragment != null) {transaction.hide(meFragment);}}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.hp_text:initTab(0);break;case R.id.film_text:initTab(1);break;case R.id.me_text:initTab(2);break;}}
}

换个方式在来一遍代码如下

public class OtherActivity extends AppCompatActivity implements View.OnClickListener {private HpFragment hpFragment;private FilmFragment filmFragment;private MeFragment meFragment;private TextView hpText;private TextView filmText;private TextView meText;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.show_activity_layout);hpText = findViewById(R.id.hp_text);hpText.setOnClickListener(this);filmText = findViewById(R.id.film_text);filmText.setOnClickListener(this);meText = findViewById(R.id.me_text);meText.setOnClickListener(this);addFragment();// 指定默认显示第一个界面,可修改onClick(hpText);}private void addFragment() {//开启事务,fragment的控制是由事务来实现的FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();if (hpFragment == null) {hpFragment = new HpFragment();transaction.add(R.id.content, hpFragment);}if (filmFragment == null) {filmFragment = new FilmFragment();transaction.add(R.id.content, filmFragment);}if (meFragment == null) {meFragment = new MeFragment();transaction.add(R.id.content, meFragment);}transaction.commitNow();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.hp_text:clearSelection();hpText.setTextColor(Color.RED);showFragment(hpFragment);break;case R.id.film_text:clearSelection();filmText.setTextColor(Color.RED);showFragment(filmFragment);break;case R.id.me_text:clearSelection();meText.setTextColor(Color.RED);showFragment(meFragment);break;}}private void showFragment(BaseFragment baseFragment) {hideAllFragment();if (baseFragment != null && baseFragment.isAdded()) {getSupportFragmentManager().beginTransaction().show(baseFragment).commitNow();}}protected void hideAllFragment() {List<Fragment> allFragment = getSupportFragmentManager().getFragments();if (allFragment.size() > 0) {for (Fragment fragment : allFragment) {if (fragment.isAdded()) {getSupportFragmentManager().beginTransaction().hide(fragment).commitNow();}}}}private void clearSelection() {hpText.setTextColor(Color.BLACK);filmText.setTextColor(Color.BLACK);meText.setTextColor(Color.BLACK);}
}

第一次进来的时候加载 fragment 的生命周期

由于时候使用的是show 再次切换Fragment的时候 就不再走Fragment的声明周期了 而是 直接显示了

如果想要切换fragment 之后之前的frament 走onPause 方法,这个时候就需要使用replace 方法

如果使用viewpager +fragment 实现 需要禁止viewpager 缓存了。

demo 地址

Fragment 使用 show 和 hide 的方式实现切换 以及切换的时候Fragment 生命周期相关推荐

  1. 史上最全Fragment介绍,包括fragment的定义,生命周期,用法

    一.为什么要使用Fragment 1.当我们需要动态的多界面切换的时候,就需要将UI元素和Activity融合成一个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个界 ...

  2. 开源博客QBlog开发者视频教程:生命周期Page_Load介绍及简洁传递参数的重构方式(四)...

    2019独角兽企业重金招聘Python工程师标准>>> 前言: 两三天没出视频了,主要是接下来的视频不好录制[给自己找个借口,其实顺路看了两天动漫], 当然中间也在一直想怎么录,怎么 ...

  3. Fragment的生命周期

    Fragment具有与Activity很相似的生命周期,依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期. 首先来看两张图,第一张是Fragment ...

  4. [转]Android fragment 重叠问题——通过hide,show方式导致的解决方法

    [转]Android fragment 重叠问题--通过hide,show方式导致的解决方法 参考文章: (1)[转]Android fragment 重叠问题--通过hide,show方式导致的解决 ...

  5. Fragment生命周期与Fragment执行hide、show后的生命周期探讨

    一.Fragment 生命周期中的每个方法的意义与作用: 1.setUserVisibleHint()(此方法不属于生命周期方法):设置Fragment 用户可见或不可见时调用此方法,此方法在Frag ...

  6. Fragment 使用 replace 的方式实现切换 以及切换的时候Fragment 生命周期

    这个主要代码在activity里面 如下 public class ReplaceActivity extends AppCompatActivity implements View.OnClickL ...

  7. Fragment系列总结(一)Fragment概念与生命周期

    写在前面 Fragment是Google在Android3.0新加的东西,它的功能和作用如同名字一样,代表着一块块碎片,而这些碎片则可以灵活地嵌入到各Activity之中. 其他关于Fragment的 ...

  8. Fragment生命周期详解

    关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...

  9. 关于FragmentManager动态管理Fragment时Fragment生命周期的探究

    Fragment是Android中的重要组件,在Android 3.0的时候添加进来. 关于Fragment的生命周期,我相信了解过的开发人员都应该把以下方法脱口而出:onAttach, onCrea ...

最新文章

  1. 1093 Count PAT‘s
  2. 15.文件系统——软RAID的实现(二)(mdadm,watch, RAID1)
  3. 查询oracle sql语句执行最慢和执行最多的语句!
  4. Linux:编译动态库时遇到的错误relocation R_X86_64_32 against `a local symbol'
  5. scala方法定义示例
  6. AUTOSAR从入门到精通100讲(九十八)-CANoe之Panel Designer的使用
  7. 华为读取版本exe_关于esrv_svc.exe和SurSvc.exe疑似泄露用户信息的猜测
  8. 使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境
  9. 多个生产者多个消费者,只有5个包子
  10. 连续+离散变量的联合分布求解
  11. 计算机输入法如何显示在桌面快捷方式,笔记本win7系统如何设置搜狗手写输入法桌面快捷方式...
  12. 插头DP~(。。。了解了一下下)
  13. python 之免费ip代理池
  14. unity anysdk android,Unity3d Android SDK接入解析(四)通用的Android SDK接入中间件
  15. POI使用公式的问题,POI对excel函数的支持
  16. 工具类源码 IP辅助类 验证IP地址或地址段是否有效 验证指定的IP是否有效 即验证IP是否属于某个IP段
  17. Linux中的高级存储管理
  18. 知乎上那些简短却非常深刻的回答
  19. 最新版qq空间刷留言小秘书 V1.20 正式版
  20. 把 ”中台“ 的思想迁移到代码中去

热门文章

  1. java带参数的方法笔记_具有Java参数的方法的类声明
  2. 简述Web程序开发流程
  3. FastAI 课程学习笔记 lesson 1:宠物图片分类
  4. tensorflow学习笔记(二十五):ConfigProtoGPU
  5. LeetCode简单题之设计停车系统
  6. TensorFlow实现多层感知机MINIST分类
  7. deepstream-开放式实时服务器
  8. TensorRT PoolingLayer
  9. GPU端到端目标检测YOLOV3全过程(上)
  10. 蓝牙mesh网络技术的亮点