Android切换fragment保留当前状态(show,hide,回退栈)

对Fragment的封装和fragment的显示隐藏回退栈管理 废话不多说,直接上代码 package test.bwie.jiyun.com.ins7566.ipandatv.widget.manger; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTrans 阅读详情

在使用多个fragment时,从fragment A切换到fragment B时,我们希望fragment A的生命周期停止,保留当前状态;处理完成后,在返回到fragment A进行更新数据.
实现这样的功能 不能使用FragmentTransaction的replace,该方法是先remove所有存在的fragment,再add当前要显示的fragment.若进行切换,原来的fragment对象已经不存在,相当于重新创建新fragment,状态就初始化了.

而是用到FragmentTransaction的show ,hide方法:使用show,hide控制fragment,它的生命周期不在执行,onResume以及onPause方法处理的事情可以在onHiddenChange进行;

1.先hide当前fragment,如果不隐藏 两个fragment可能就会重叠.接着添加要显示的fragment;

   /**
     * 隐藏当前fragment,显示下一个fragment
     *
     * @param nextFragment
     */
    public void showFragment(UpdatableFragment nextFragment) {
        if (nextFragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            FragmentTransaction transaction = fragmentManager.beginTransaction();
          Fragment  PreviousFragment = getSupportFragmentManager().findFragmentById(R.id.main_fragment);//获取当前fragment
            if (PreviousFragment != null) {
                transaction.hide(PreviousFragment);
            }
            if (!nextFragment.isAdded()) {//判断是否以添加过
                transaction.add(R.id.main_fragment, nextFragment);
                transaction.addToBackStack(null);//添加到回退栈  重要!!!
            }
            transaction.show(nextFragment).commit();
        }
    }

2.调用popBackStackImmediate(立刻弹出栈顶fragment),就会回到上一个fragment.

   /**
     * 返回上一个fragment
     */
    public void hideFragment() {
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.popBackStackImmediate();
    }

例子:

当前fragment A   点击  button B  切换到  fragment B;
button B.onclick{
showFragment(fragment B)
}

fragment B点击 Button A 切换到 fragment A
button A.onclick{
hideFragment();//返回到上一个fragment
}

若想返回到fragment A时更新数据,可重写onHiddenChanged方法:

public class FragmentA extends Fragment{
  @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        if (hidden) {
            Log.i(TAG, "onHiddenChanged:  hide 隐藏时调用");
        } else {
            Log.i(TAG, "onHiddenChanged:  show 显示时调用");
            //更新数据
        }
    }
}

Android开发中Fragment的显示与隐藏实战详解 随着Jetpack Compose的兴起,传统的Fragment模式正在面临挑战。但在现阶段,绝大多数项目仍以XML+Fragment为主流架构。掌握其核心机制不仅能帮你写出更稳定的代码,也为将来过渡到现代化方案打下坚实基础。记住一句话:好的架构不是追求最新技术,而是让复杂变得可控。Fragment虽老,但只要用得其所,依然是构建高质量Android应用的利器 🛠️✨本文还有配套的精品资源,点击获取。 阅读详情

相关推荐

fragment 通过show和hide 实现界面切换

fragment 通过show和hide 实现界面切换,简单封装一些基类................................................................

Android中Fragment的Hide和Show

  我们都知道,Fragment动态添加的时候我们可以使用FragmentTransaction的add和replace方法,replace方法就等效于对这个Fragment先执行remove(),再执行add()。但是在实际的项目中,有很多时候我们会用到底部是一个RadioGroup包裹的RadioButton,上面用Fragment的情况,因为我们是从网络上获取的数据,这种时候我们不希望点击加...

weixin_30666401的博客 409

RAG——RAG 索引(文档解析技术)

本文介绍了RAG系统中文档解析的关键技术,重点分析了如何通过LangChain的Document Loaders处理多种格式文档。文章指出高质量文档解析对RAG系统效果的决定性作用,并详细讲解了PDF、TXT、Word等常见格式的解析方法。作者提供了代码示例和Gitee开源项目链接,特别强调了PDF解析的深入方案,同时介绍了相关依赖库的安装配置。文章还展示了如何定义通用文档加载方法,为开发者提供了实用的技术参考。

小志的博客 751

Fragment-hide和show

为了节约资源,现在很多 app 采用了 replace() 方法来实现碎片的切换,但是在这种情宽下,如果不讲之前的碎片雅茹栈中,就无法避免之前碎片回随之销毁,所以我们采用 hide() 和 show() 方法来实现碎片的切换。...

chuyouyinghe的专栏 850

从CORDIC到DDS:手把手拆解《Verilog传奇》第9章的实战项目(附可跑通的代码)

本文详细解析了如何从CORDIC算法到DDS系统的完整实现过程,基于《Verilog传奇》第9章的实战项目,提供了可运行的Verilog代码。内容涵盖CORDIC算法的硬件实现、DDS系统架构设计、完整系统集成与验证,以及实际部署中的性能调优技巧,适合数字IC和FPGA开发者深入学习。

weixin_42623010的博客 413

STM32 热敏电阻测量温度

1、硬件 STM32F103C8T6、热敏电阻传感器、OLED。 2、热敏电阻传感器的介绍

weixin_54721788的博客 1万+

Fragment 的hide()与show()

Fragment的hide()与show() 第一种方法:利用TAG标记位实现与隐藏的方法 记下来 以免遗忘 private void updateFragment(Classextends android.support.v4.app.Fragment> cls,String TAG) { FragmentTransaction transaction = fragmentM

wuming_xu的博客 483

同花顺Supermind量化交易 风险控制建模--海龟交易法则

A.市场与标的海龟交易法则应用于流动性高的市场中,选择交易量较大的标的进行交易。本文以沪深300指数ETF为标的,构建海龟交易法则。B、仓位:仓位是海龟交易系统最核心的部分,通过ATR真实波幅指标来管理仓位。第一步:计算True Range,简称TR。TR = Max ( H−L , H−P , P−L ) ,其中H为当日日内最高价,L为当日日内最低价,P为前一日收盘价。第二步:计算ATRATR = mean ( TR , 20 ) , 即计算过去20天的TR的平均值,ATR是TR的移动平均值。

qq_22808537的博客 1497

安卓 Fragment方法add show hide

Android中add()、show()和hide()方法用于高效管理Fragment的显示与隐藏,适用于需要频繁切换且保留状态的界面。add()方法添加Fragment并完整执行生命周期,show()和hide()仅控制视图可见性而不影响生命周期。相比replace()会销毁Fragment,hide/show组合能保留状态但占用更多内存,适合底部Tab切换等场景。示例展示了三个Fragment的切换实现,通过FragmentTransaction管理,结合addToBackStack支持返回操作。关键优

梦想不只是梦与想的博客 943

Autoware1.14-摄像头目标检测YOLO-V3

在Autoware1.14中部署YOLOV3

weixin_43687753的博客 3139

NLP实战:如何用CoNLL-2003数据集快速提升命名实体识别模型性能(附完整代码)

本文详细介绍了如何利用CoNLL-2003公开数据集,通过深度剖析数据特点、构建鲁棒的数据预处理流水线、选择合适的模型架构(如BERT-CRF)以及优化训练策略,来系统性地提升命名实体识别(NER)模型的性能。文章提供了完整的代码示例,并分享了处理数据不均衡、标签对齐等核心挑战的实战技巧,帮助读者从理论到实践全面掌握NER任务。

cola5的博客 494

Fragment --replace方法和hide、show方法的生命周期分析

总结:1、replace,加回退栈,Fragment不销毁,但是切换回销毁视图和重新创建视图。          2、replace,不加回退栈,Fragment销毁掉。          3、hide、show,Fragment不销毁,也不销毁视图。隐藏和显示不走生命周期。1、Fragment采取replace方法替换、并加入回退栈。private void replaceFragment(in...

tiantaiaiqing的专栏 1万+

VASP计算层错能(SFE)全攻略2

本文介绍了使用VASP计算纯镍(Ni)层错能(SFE)的具体步骤。首先构建Ni的FCC单胞并扩展为超胞,通过修改原子位置引入堆垛层错;随后分别计算完美晶体和含层错结构的能量;最后通过能量差与层错面积之比求得SFE值。计算需注意k点网格、截断能和超胞尺寸的收敛性测试,并推荐使用PAW赝势和ASE等工具辅助结构构建。

weixin_50519490的博客 1986

android 回退栈,Android Fragment回退栈管理(popBackStack)

一、概述在一个Activity+多个Fragment的回退处理,一开始使用传统的add加hide,show进行判断切换,这样对于同级fragment用着挺不错的,比如导航栏类似的功能,多个层级的回退就需要添加判断很不实用,所以用到了addToBackStack,popBackStack来实现。还有就是自己定义一个list来管理fragment,这个可以参考文章。hide和show的导航栏:priv...

weixin_42566072的博客 1836

相位编码脉冲压缩信号的理论研究与 Matlab 实现

通过实际的代码示例,我们展示了如何生成信号、进行相位编码、传输信号、相位解码和脉冲压缩的步骤。相位编码脉冲压缩信号是通过在发射端对信号进行相位编码,并在接收端对信号进行相位解码来实现的。其主要原理是在发射端将信号的频率进行调制,使得信号具有宽带特性,然后在接收端通过匹配滤波器对信号进行解调和压缩,从而提高信号的分辨率和抗干扰能力。相位编码脉冲压缩信号是一种在信号处理中常用的技术,用于提高信号的分辨率和抗干扰能力。可以使用 Matlab 中的信号生成函数生成一个宽带脉冲信号,例如矩形脉冲信号或高斯脉冲信号。

CyberWizarDD的博客 901

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android Fragment回退栈管理(popBackStack)

一、概述 在一个Activity+多个Fragment的回退处理,一开始使用传统的add加hide,show进行判断切换,这样对于同级fragment用着挺不错的,比如导航栏类似的功能,多个层级的回退就需要添加判断很不实用,所以用到了addToBackStack,popBackStack来实现。还有就是自己定义一个list来管理fragment,这个可以参考文章。 hide和show的导航栏:...

JUN_LLLL的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android 多 Fragment 切换优化

code小生,一个专注 Android 领域的技术平台公众号回复 Android 加入我的安卓技术群作者:DDDong丶链接:https://www.jianshu.co...

weixin_38754349的博客 1289

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Fragment切换动画和回退栈的使用,和使用动画后导致回退时的崩溃问题;

先说一下出现崩溃的问题:页面是一个有很多下一步的界面,不想点击下一步就打开一个新的Activity,所以就点击下一步时切换Fragment,并使用回退栈处理返回事件; 单Activity多Fragment有回退栈,使用replace的方式切换Fragment,非常简单的就完成了;在初步体验一下时发现Fragment切换有点生硬,于是我给Fragment加了切换动画;在使用回退栈返回时问题就来了;...

Choi晨的博客 1630

Android Fragment回退栈实现思路

Demo地址 场景 Activity负责4个Fragment展示 Activity底部有一个导航栏 分析 初始化 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMain1Binding.inflate(getLayoutInflater()); setContentView(bindin.

碧云天丶 538

android 为什么fragment在调用hide方法后没有生效_Android 多 Fragment 切换优化

code小生,一个专注 Android 领域的技术平台公众号回复 Android 加入我的安卓技术群作者:DDDong丶链接:https://www.jianshu.com/p/c8e8a0249911声明:本文已获DDDong丶授权发表,转发等请联系原作者授权问题分析一直在简书里看别人的技术贴,今天我也来写点自己的心得!最近在写一个项目用到大量的Fragment后的总结!我想刚刚接触安...

weixin_29615645的博客 1294

android Fragment FragmentActivity 选项卡 replace add hide show

android Fragment FragmentActivity 选项卡 replace add hide show

随意而然的专栏 988

Android应用篇 - Fragment 的介绍、回退栈和优化

这篇文章来总结下 Fragment。全文包括 Fragment 介绍,Fragment 回退栈、V4 包差异 和Fragment 的优化四块内容。 Fragment 介绍 1. 简介 Fragment 是在 Android3.0 版本中添加的,主要是为了解决 Android设备尺寸多样化后界面的显示问题。Fragment 比 Activity 较轻量级,可以提供与用户交互的...

u014294681的博客 1828

Fragment高级

Fragment高级Fragment回退栈Fragment传值Activity给Fragment传递值Fragment给Activity传递值接口回调fragment 给 fragment 传值简单的案例(底部按钮控制fragment切换) Fragment回退栈 adioGroupId.setOnCheckedChangeListener(new RadioGroup.OnCheckedChan...

weixin_45697390的博客 343

Fragment切换的方式介绍和一些问题的解决

Fragment 切换 1. FragmentManager:用来管理Activity中的fragment,app包中使用getFragmentManager() v4包中getSupportFragmentManager 2. FragmentTransaction: 事务,用来添加,移除,替换fragment。 3. FragmentTransaction transaction = fm.benginTransatcion();//开启一个事务 4. transaction.add() :

zpeien 7127

Android 多fragment,Android 多Fragment切换优化

问题分析一直在简书里看别人的技术贴,今天我也来写点自己的心得!最近在写一个项目用到大量的Fragment后的总结!我想刚刚接触安卓的同学或许会这么写:FragmentManager fragmentManager=getSupportFragmentManager();FragmentTransaction fragmentTransaction=fragmentManager.beginTran...

weixin_39614704的博客 292
上一篇: Linux快捷键
下一篇: RecyclerView使用——有效解决刷新数据错乱,图片闪烁,OOM问题
sunyFS
博客等级 码龄7年 21粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值