Fragment学习之旅(二)

Android第一行代码——快速入门 Kotlin 编程( 5.2 Fragment 的使用方式) 说实在的,这个问题并没有看上去那么复杂,它的基本思路非常简单:首先在一个Fragment 中可以得到与它相关联的 Activity ,然后再通过这个 Activity 去获取另外一个 Fragment 的实例, 这样就实现了不同 Fragment 之间的通信功能。在上一节当中,你已经学会了在布局文件中添加 Fragment 的方法,不过 Fragment 真正的强大之处在于,它可以在程序运行时动态地添加到 Activity 当中。介绍了这么多抽象的东西,是时候学习一下 Fragment 的具体用法了。 阅读详情

管理Fragment

1、FragmentManager

管理Activity中的Fragment,可以使用FragmentManager,通过getFragmentManager或getSupportFragmentManager获取
常用方法:
- manager.findFragmentById():根据ID找到相应的Fragment,主要用于静态添加Fragment
- manager.findFragmentByTag():根据Tag找到相应的Fragment,主要用于动态添加Fragment
- manager.getFragments():获取所有被放进Activity中的Fragment

2、FragmentTransaction

常用方法:

  • add(int containerViewId, Fragment fragment, String tag):将一个Fragment实例添加到Activity的最上层
  • remove(Fragment fragment):将一个fragment实例从Activity队列中删除
  • replace(int containerViewId, Fragment fragment):替换containerViewId中的fragment,它首先把containerViewId中的所有fragment删除,然后再add当前fragment
3、add()、remove()、replace()的使用方法
  • 新建两个fragment1.xml和fragment2.xml

fragment1.xml:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:background="#ff00f0"  
        android:orientation="vertical" >  

        <TextView  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="This is fragment 1"  
            android:textColor="#000000"  
            android:textSize="25sp" />  

    </LinearLayout>  

fragment2.xml:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:background="#ffff00"  
        android:orientation="vertical" >  

        <TextView  
            android:id="@+id/fragment2_tv"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="This is fragment 2"  
            android:textColor="#000000"  
            android:textSize="25sp" />  

    </LinearLayout>  
  • 在创建相应的Fragment1类和Fragment2类
  • MainActivity布局:添加add_frag1、add_frag2、remove_frag2、replace_frag1四个按钮,以及一个放置fragment的容器
    1、 添加一个addFragment(Fragment fragment, String tag)方法
private void addFragment(Fragment fragment, String tag){
    //获取FragmentManager
    FragmentManager manager = getSupportFragmentManager();
    //开启事务
    FragmentTransaction transaction = manager.beginTransaction();
    //将Fragment添加到Transaction中
    transaction.add(R.id.fragment_container, fragment,tag);
    //提交事务
    transaction.commit();
}

2、添加Fragment1和Fragment2

 Fragment1 fragment1 = new Fragment1();
 addFragment(fragment1,"fragment1);
Fragment2 fragment2 = new Fragment2();
addFragment2(fragment2,"fragment2");

3、removeFragment2

private voiid removeFragment2(){
        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        Fragment fragment = manager.findFragmentByTag("fragment");
        transaction.remove(fragment);
        transaction.commit();
}

4、ReplaceFragment1:

private void replaceFragment1(){
    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    Fragment2 fragment2 = new Fragment2();
    transaction.replace(R.id.fragment_container, fragment2);
    transaction.commit();

注:replace方法将container中的fragment都清空,然后添加新的fragment。

Fragment的回滚

1、 使用addToBackStack(String tag)将fragment添加到回退栈

transaction.addToBackStack(String tag);

2、 使用popBackStack将最上层的fragment弹出回退栈

manager.popBackStack();

3、 可以使用ID和Tag来指定弹出到操作所在层

void popBackStack(int id,int flags);
void popBackStack(String tag,int flags);
  • id为transaction时的返回值
  • flags有两个值:0或FragmentManager.POP_BACK_STACK_INCLUSIVE;
  • 当flags为0时,表示弹出除参数所在层之外的所有上层
  • 当flags为FragmentManager.POP_BACK_STACK_INCLUSIVE时,表示弹出包括参数所在层的所有上层

4、 添加Fragment的方法

private int addFragment(Fragment fragment,String tag){
    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.add(R.id.fragment_container,fragment,tag);
    transaction.addToBackStack(tag);
    return transaction.commit();
}

5、 弹出回退栈顶的方法

private void popBackStack(){
    FragmentManager manager = getSupportFragmentManager();
    manager.popBackStack();
}

6、弹出到指定层的方法,flags为0时,例:

private void popBackStackToFrag2(){
    FragmentManager manager = getSupportFragmentManager();
    manager.popBackStack("fragment2",0);
    //manager.popBackStack(stackID2,0);
}

7、弹出到指定层,flags为FragmentManager.POP_BACK_STACK_INCLUSIVE时,例:

private void popBackStackToFrag2_Include(){
    FragmentManager manager = getSupportFragmentManager();
    manager.popBackStack("fragment2",FragmentManager.POP_BACK_STACK_INCLUSIVE);
    //manager.popBackStack(stackID2,FragmentManager.POP_BACK_STACK_INCLUSIVE;);
Fragment的事务

Fragment事务是以一次commit()事务提交为单位,而不是以add、replace等为单位。

Android开发 - 获取当前Fragment对象 根据你的具体应用场景,选择合适的方法来获取当前的Fragment对象。本文将介绍几种获取当前Fragment对象的方法,并提供相应的源代码示例。通过getCurrentItem()方法可以获取当前ViewPager所显示的Fragment的位置,然后通过适配器的getItem()方法获取相应位置的Fragment对象。如果你的应用程序使用ViewPager来管理多个Fragment,那么你可以使用ViewPager的getCurrentItem()方法来获取当前正在显示的Fragment对象。 阅读详情

相关推荐

【自然语言处理】【聚类】TELL:可解释神经聚类

超越分类的XAI:可解释神经聚类 《XAI Beyond Classification: Interpretable Neural Clustering》 论文地址:https://www.jmlr.org/papers/volume23/19-497/19-497.pdf 一、简介 ​ 本文研究了可解释AI(XAI\text{XAI}XAI)和数据聚类这两个挑战性问题。第一个问题是如何设计一种具有固定可解释性的神经网络,而不是给出一个黑盒模型的事后解释。第二个问题是,使用可微分神经网络来实现离散的k-me

bqw的博客 4136

Fragment的相关用法第一篇

这篇关于fragment第一篇博客是为了鸿洋大神的博客写个前面的东西。 通过tag查找fragment。 Android.app.FragmentManager.findFragmentByTag(String tag) 使用Fragment,先获取其实例,通过tag找到内存中的实例,如果取到null,再初始化实例。那么tag怎么获取? 1、 andr

u010597493的博客 879

GAMES101学习-第8课进行shader的初步了解

详细理解课上展示的像素着色器GLSL,以及了解了API、OpenGL、DirectX到底是什么,还有shadertoy这个网站的初步探索。

qq_41835314的博客 1917

Fragment篇——FragmentManager分析及用例

说到管理Activity中的Fragment,自然就要重点说一下FragmentManager

u012241729的专栏 9758

advanced installer 打包Flutter的Windows程序安装包(基本打包、开机自启、定时自动检测升级、包含卸载程序)

advanced installer 打包Flutter的Windows程序安装包(基本打包、开机自启、定时自动检测升级、包含卸载程序)

qq_45634989的博客 2878

yolov7目标追踪:基于自定义数据集完成检测

目标追踪包含两个阶段:(1)基于自定义数据集,训练yolo目标检测模型;(2)基于检测模型,将实时检测结果传递到StrongSORT追踪算法中,该算法在OSNet基础上结合运动和外观信息,可以跟踪yolo模型检测到的任何物体。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2306

Fragment使用技巧

Android入门之Fragment自学笔记

weixin_53238517的博客 539

Vue2+OpenLayers动态绘制两个经纬度并计算距离(提供Gitee源码)

动态绘制两个经纬度并计算它们之间的距离。

黄团团的个人博客 365

Fragment学习之findFragmentById的使用

在Activity中我们可以使用findFragmentById方法来获取一个fragment然后再获取该fragment中的相关kongjian

lavimer 2万+

【AI智能体】Codex 基于Git 实现项目管理实战操作详解

Codex 基于Git 实现项目管理实战操作详解

congge 5454

Opencv计算机视觉PPT-算法篇

01 02 03 04 05 06 07 08 09 010 011 012 013 014 015 016 017 018

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 203

Fragment学习之旅(三)

hide()、show()的使用1、方法展示//将指定的Fragment隐藏不显示 public FragmentTransaction hide(Fragment fragment); //将以前隐藏过的Fragment显示出来 public FragmentTransaction show(Fragment fragment);2、frag hide的代码:FragmentManager man

guotao976的博客 438

从LLM到VLM再到VLA:三兄弟的“变形记”——定义、架构演进与最新趋同

LLM、VLM、VLA虽然在时间上依次出现,但它们在架构上的演进并非线性替代,而是形成了一个从“理解语言”到“理解世界”再到“改变世界”的认知闭环。VLA之所以能在短短三年内从概念走向现实,正是因为它站在了LLM和VLM的肩膀上——RT-2的泛化能力来自互联网规模的VLM预训练,π0的扩散策略受益于生成式模型的突破,Helix的双系统架构借鉴了“快慢思考”的认知科学洞见。而反过来,VLA在实际部署中遇到的效率瓶颈和实时性要求,也在倒逼LLM和VLM向更轻量、更高效的架构方向演进。

Ven%的博客 490

android学习之旅(11)--Activity与Fragment

Activity Activity是Android的四大组件之一,在Android应用的开发中占有举足轻重的作用。简单来说我们在屏幕上看到界面就是一个Activity,它表示一个单一屏幕的用户界面。 创建Activity (1)新建类继承Activity或其子类 (2)在AndroidManifest中声明(注册) (3)创建layout并在新建类的onCreate方法中设置 如果是使用继承开发...

孔晨瑞的博客 764

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

记录一次解决Fragment问题之旅

做为一只小小菜鸟,这些日子在学习新技术思想的同时,自己写了一篇仿今日头条APP,想法是简单的,实现却是有些困难,先说说程序中遇到的问题     代码逻辑如图:在MainActivity通过FragmentTabHost对以上4个Fragment进行初始化操作,BaseLazyFragment封装了不周 生命周期Fragment需要进行的操作及初始操作,BaseFragment中定义了一些公...

TouchOfSun的博客 361

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

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

Fragment学习之旅(一)

一、fragment的设计理念Android在3.0中引入了fragment的概念,主要目的使用在大屏幕上,例如平板电脑上,支持更加动态和灵活的UI设计。 fragment在你的应用中应该是一个模块化和可重用的组件,因为fragment定义了它自己的布局,以及通过它自己的生命周期回调方法定义了它自己的行为,你可以将fragment包含到多个Activity中。二、fragment的生命周期 onA

guotao976的博客 424

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【Android】Fragment基本使用

Fragment是一种可以嵌入在Activity当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用得非常广泛。

2303_79296612的博客 1757

四大组件:Fragment: Fragment 你所不知道的细节

Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数_Tibib的专栏-优快云博客_fragment setarguments为什么要用Fragment.setArguments(Bundle bundle)来传递参数https://blog.youkuaiyun.com/tu_bingbing/article/details/24143249​​​​​​Fragment运行机制源码分析(一)_Android学习之旅-优快云博客_android fra

C++ JAVA的专栏 859

Android初识Fragment

Android初识Fragment

Android应用开发工程师 1950

从Vue2到Vue3【五】——新的组件(Fragment、Teleport、Suspense)

本文详细讲解了vue3中新增的三个组件(Fragment、Teleport、Suspense),这些新增的组件为Vue 3带来了更多的灵活性和便利性。它们使得组件化开发更加简单且功能更丰富,为开发者提供更多的选择和工具来构建高效、可维护的应用程序。

悟其浅而深修,沉其心而精进 5830

Android Fragment的用法

  1、Fragment是什么   Fragment(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛。虽然碎片对你来说应该是个全新的概念,但我相信你学习起来应该毫不费力,因为它和活动实在是太像了,同样都能包含布局,同样都有自己的生命周期。你甚至可以将碎片理解成一个迷你型的活动,虽然这个迷你型的活动有可能和普通的活动是...

gxflh的博客 286

探索WebGL的世界:从Fragment Shaders入门的奇妙之旅

探索WebGL的世界:从Fragment Shaders入门的奇妙之旅 在数字创意与现代网页开发的交汇处,有一个名为jam3-lesson-webgl的开源宝藏,它以一个令人着迷的模块——《WebGL课程——片段着色器》引领我们深入理解图形编程的核心。本文旨在探索这一课程的魅力,向开发者和图形爱好者展示如何通过掌握片段着色器,解锁新的视觉效果和渲染技巧。 项目简介 《WebGL Lessons —...

gitblog_00145的博客 1052

Android Fragment的用法(一)

1、碎片是什么 碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛。虽然碎片对你来说应该是个全新的概念,但我相信你学习起来应该毫不费力,因为它和活动实在是太像了,同样都能包含布局,同样都有自己的生命周期。你甚至可以将碎片理解成一个迷你型的活动,虽然这个迷你型的活动有可能和普通的活动是一样大的。 那么究竟要如何使用碎片才...

Android 开发架构 894

【Android Jetpack学习之旅】--> Navigation 的使用

Navigation 是一个可简化 Android 导航的库和插件;更确切的来说,Navigation是用来管理 Fragment 的切换,并且可以通过可视化的方式,看见 App 的交互流程。这完美的契合了 Jake Wharton 大神单 Activity 的建议。

Kevin Learn Android 1495

Android 基础教程5 fragment

随着社会的发展,我们小时候要写日记的场景慢慢的淡出了视野。但是很多时候我们仍然希望能够记录下自己生活的点点滴滴,借助学习Android的机会,我们打造一个自己的日记本。 新建工程LikeNotes: 博主写的文章是记录学习过程的文章,所以工程看起来比较乱,不会按照app常规的开发流程进行,今天我们主要是学习Fragment的使用,最终实现一个展示日记列表和日记详细信息的页面。 Fragment(...

秋殇阁 362

InterviewGuide 精选力扣 300+ 题之贪心算法 Easy 篇:6 道入门经典题解与 C++ 实现

本文整理自 [InterviewGuide](https://link.gitcode.com/i/7aa9437670313446cbe11b5890f23a56) 仓库中阿秀(for the Spada)在校招刷题期间整理的「精选力扣 300+ 题」专栏之**贪心算法(Easy 档)**部分,完整覆盖该档全部 6 道题:944 删列造序、1029 两地调度、1046 最后一块石头的重量、104

gitblog_00873的博客 1097
上一篇: Fragment学习之旅(一)
下一篇: Fragment学习之旅(三)
guotao967
博客等级 码龄11年 1粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值