Fragment 使用 show 和 hide 的方式实现切换 以及切换的时候Fragment 生命周期
实现的效果如下图
主要的代码在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 生命周期相关推荐
- 史上最全Fragment介绍,包括fragment的定义,生命周期,用法
一.为什么要使用Fragment 1.当我们需要动态的多界面切换的时候,就需要将UI元素和Activity融合成一个模块.在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个界 ...
- 开源博客QBlog开发者视频教程:生命周期Page_Load介绍及简洁传递参数的重构方式(四)...
2019独角兽企业重金招聘Python工程师标准>>> 前言: 两三天没出视频了,主要是接下来的视频不好录制[给自己找个借口,其实顺路看了两天动漫], 当然中间也在一直想怎么录,怎么 ...
- Fragment的生命周期
Fragment具有与Activity很相似的生命周期,依存与Activity而存在的,因此Activity的生命周期会直接影响到Fragment的生命周期. 首先来看两张图,第一张是Fragment ...
- [转]Android fragment 重叠问题——通过hide,show方式导致的解决方法
[转]Android fragment 重叠问题--通过hide,show方式导致的解决方法 参考文章: (1)[转]Android fragment 重叠问题--通过hide,show方式导致的解决 ...
- Fragment生命周期与Fragment执行hide、show后的生命周期探讨
一.Fragment 生命周期中的每个方法的意义与作用: 1.setUserVisibleHint()(此方法不属于生命周期方法):设置Fragment 用户可见或不可见时调用此方法,此方法在Frag ...
- Fragment 使用 replace 的方式实现切换 以及切换的时候Fragment 生命周期
这个主要代码在activity里面 如下 public class ReplaceActivity extends AppCompatActivity implements View.OnClickL ...
- Fragment系列总结(一)Fragment概念与生命周期
写在前面 Fragment是Google在Android3.0新加的东西,它的功能和作用如同名字一样,代表着一块块碎片,而这些碎片则可以灵活地嵌入到各Activity之中. 其他关于Fragment的 ...
- Fragment生命周期详解
关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...
- 关于FragmentManager动态管理Fragment时Fragment生命周期的探究
Fragment是Android中的重要组件,在Android 3.0的时候添加进来. 关于Fragment的生命周期,我相信了解过的开发人员都应该把以下方法脱口而出:onAttach, onCrea ...
最新文章
- 1093 Count PAT‘s
- 15.文件系统——软RAID的实现(二)(mdadm,watch, RAID1)
- 查询oracle sql语句执行最慢和执行最多的语句!
- Linux:编译动态库时遇到的错误relocation R_X86_64_32 against `a local symbol'
- scala方法定义示例
- AUTOSAR从入门到精通100讲(九十八)-CANoe之Panel Designer的使用
- 华为读取版本exe_关于esrv_svc.exe和SurSvc.exe疑似泄露用户信息的猜测
- 使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境
- 多个生产者多个消费者,只有5个包子
- 连续+离散变量的联合分布求解
- 计算机输入法如何显示在桌面快捷方式,笔记本win7系统如何设置搜狗手写输入法桌面快捷方式...
- 插头DP~(。。。了解了一下下)
- python 之免费ip代理池
- unity anysdk android,Unity3d Android SDK接入解析(四)通用的Android SDK接入中间件
- POI使用公式的问题,POI对excel函数的支持
- 工具类源码 IP辅助类 验证IP地址或地址段是否有效 验证指定的IP是否有效 即验证IP是否属于某个IP段
- Linux中的高级存储管理
- 知乎上那些简短却非常深刻的回答
- 最新版qq空间刷留言小秘书 V1.20 正式版
- 把 ”中台“ 的思想迁移到代码中去