【Android笔记】Fragment用法(未完)

安卓重要UI组件之 Fragment 阅读详情

一、静态添加

1.写一个Fragment的布局文件fragment.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:background="#00ff00" >  
  
    <TextView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="This is fragment"  
        android:textColor="#000000"  
        android:textSize="25sp" />  
  
</LinearLayout>  


2.继承Fragement类并载入布局:

public class MyFragment extends Fragment {  
  
    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  
        return inflater.inflate(R.layout.fragment, container, false);  
    }  
  
}  

3.在Activity的布局文件中引用它:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:baselineAligned="false" >  
  
    <fragment  
        android:id="@+id/fragment"  
        android:name="com.example.fragmentdemo.MyFragment"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        /> 
  
</LinearLayout>  


4.在对应的Activity中获取该Fragment实例:

Fragment不是View的子类,不能使用findViewById()方法获取。
MyFragment myFragment = (MyFragment) getFragmentManager().findFragmentById(R.id.fragment);

二、动态添加

布局和继承Fragment如上。

1.在Activity中指定一个放置Fragment的布局,如:

<FrameLayout 
    android:id="@+id/fragment_layout"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    >  
  
</LinearLayout> 

2.在Activity代码中动态添加Fragment:
MyFragment myFragment = new MyFragment();  
// 获取到FragmentManager
FragmentManager manager = getFragmentManager();
// 开启一个事务
FragmentTransaction transaction = manager.beginTransaction();
// 向容器内加入Fragment
transaction.replace(R.id.fragment_layout, myFragment);
// 提交事务
transaction.commit();


三、解耦

有时候,第二节中最后一段代码会放在某个Fragment里,以放在Button点击事件中为例。由于代码中指定了R.id.fragment_layout是某个指定Activity中的组件,此Fragment与该Activity耦合。如何解耦呢?

在MyFragment中定义一个接口:

public interface MyFragmentListener {
    void onClick();
}

接下来在MyFragment有两种方法解耦。

方法一,仅需要Activity实现此接口:

public void onClick(View v) {
    if (getActivity() instanceof MyFragmentListener) {
        ((MyFragmentListener) getActivity()).onButtonClick();
    }
}

方法二,不仅需要Activity实现此接口,还要调用set方法传入接口对象:

public void setMyFragmentListener(MyFragmentListener myFragmentListener) {
    this.myFragmentListener = myFragmentListener;
}

@Override
public void onClick(View v) {
    if (myFragmentListener != null) {
        myFragmentListener.onButtonClick();
    }
}

四、自定义控件

使用Fragment与引入自定义控件有类似之处,在这里穿插一下自定义控件的使用方法,结合Fragment体会其中的相同与相异点,可以加强记忆深化理解。

以自定义顶部工具栏为例:

1.在layout文件夹下写一个工具栏的布局title.xml,此例使用LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="@drawable/title"
    >
    <!-- 这里添加控件 -->
</LinearLayout>


如果不需要为其中的控件添加事件监听器,则直接在其他XML文件中用include语句引入此布局:

<include layout="@layout/title"/>
否则继续如下步骤。


2.继承LinearLayout并在构造方法中导入布局、为相关组件添加监听器等。

public class TitleLayout extends LinearLayout {

    public TitleLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.title, this);
        // 还可以为相关控件添加监听器等
    }

}


3.像添加组件一样在其他xml文件中使用它,注意须带完整的包名和类名,如:

<com.example.fragmenttest.TitleLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        ></com.example.fragmenttest.TitleLayout>

五、生命周期


比Activity多出来几个方法:

onAttach(Activity)
// Fragment与Activity建立关联时调用。

onCreateView(LayoutInflater, ViewGroup,Bundle)
// 创建Fragment的视图(加载布局)

onActivityCreated(Bundle)
// 当Activity的onCreate方法返回时调用

onDestroyView()
// Fragment的视图被移除时调用(注意,不是销毁视图)

onDetach()
// Fragment与Activity解除关联时调用

注意:除了onCreateView,如果重写了其他方法,必须调用父类对于该方法的实现。

OnDestroyView()不是销毁视图,而是移除视图!


六、常用类与方法

android.app.Fragment 
android.app.FragmentManager // 在Activity中操作Fragment,通过getFragmentManager()获取实例。
android.app.FragmentTransaction // 事务,用于保证对Fragment操作的原子性,通过fragmentManager.beginTransaction()获取实例。


1.主要操作:FragmentTransaction

主要操作都是FragmentTransaction的方法:

add() 往Activity中添加一个Fragment

注:如果是新建的Fragment,则依次回调onAttach()、onCreate()、onCreateView()、onActivityCreated()、onStart()、onResume()。


remove() 从Activity中移除一个Fragment

注:如果没有调用transaction.addToBackStack(),则依次回调onPause()、onStop()、onDestroyView()、onDestroy()、onDetach()。否则只执行到onDestroyView()为止。

又注:Fragment中EditText等控件的数据会丢失


replace() 使用另一个Fragment替换当前,实际上就是remove()然后add()的合体

hide() 隐藏当前的Fragment,仅仅是设为不可见,并不会销毁

注:不会触发生命周期中的任何方法

又注:Fragment中EditText等控件的数据不会丢失 


show() 显示之前隐藏的Fragment
注:同上,不会触发生命周期中的任何方法

detach() 会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
注:这里没有把Fragment与Activity解除关联,不会触发onDetach()方法。仅onPause()、onStop()、onDestroyView()

attach() 重建view视图,附加到UI上并显示。
注:这里不是把Fragment与Activity建立关联,不会触发onAttach()方法。仅onCreateView()、onActivityCreated()、onStart()、onResume()

commit() 提交一个事务
注:同一个事务不能重复提交,commit()之后如需运行其他事务,需要先beginTransaction()获取一个新事务

又注:如果在Activity的onSaveInstanceState()方法之后commit()事务,则会抛出IllegalStateException,详见《Fragment提交transaction导致state loss异常》


addToBackStack() 将当前事务添加到返回栈,按下返回键时此事务从栈中弹出,会反转此事务的操作,回复之前的状态(如果用了remove()、replace()方法,则Fragment中控件的数据会丢失)


补充:按下Home键与Activity一样,只回调onPause()、onStop()。恢复亦然。


2.Fragment与Activity通信

Fragment中用getActivity()方法获取Activity对象

Activity中用getFragmentManager.findFragmentById()方法获取Fragment对象


待整理:http://blog.youkuaiyun.com/lmj623565791/article/details/37992017

安卓APP_ Fragment(1)—— Fragment概念、基础用法、动态变换、管理栈 Fragment一、Fragment是什么Fragment的产生原因Fragment两个重要特性具备生命周期寄宿在Activity中运行二、Fragment基础用法简单演示(1)New创建一个Activity(2)添加一个空白的Fragment(3)Fragment 绑定到宿主Activity(4)在Activity中创建两个Fragment具体细节在代码中呈现 一、Fragment是什么 Fragment的产生原因 Fragment很像是小的,简短的Activity。 Fragment在安卓3.0后才开始 阅读详情

相关推荐

Android StudioRecyclerView,fragment,adapter的用法

安卓recyclerview使用方法: 1、新建一个适配器类继承RecyclerView.Adapter泛型是内部类的ViewHolder,然后重写onCreateViewHolder(返回一个新的ViewHolder对象)、onBindViewHolder(绑定ViewHolder)、getItemCount(此方法返回子项目的条数)方法。 2、新建内部类ViewHolder继承RecyclerView.ViewHolder重写构造方法,用于存储实例对象,加强性能。 原文链接:https://blog.c

jeancoder的博客 1540

Fragment学习之findFragmentById的使用

在Activity中我们可以使用findFragmentById方法来获取一个fragment然后再获取该fragment中的相关控件。 通过一个demo来体现。 MainActivity.java代码如下: [java] view plain copy public class MainActivity extends FragmentActi

zhaokai621的博客 5851

立创开源便携式多生理参数监护仪:基于STM32H743与ADS1292R的心电血氧体温监测系统设计

本文详细解析了基于STM32H743与ADS1292R的便携式多生理参数监护仪开源设计。项目集成了心电、血氧和体温监测功能,采用模块化硬件架构,并重点介绍了利用FIR滤波和Pan-Tompkins算法进行心电信号处理的核心技术。文章提供了完整的复刻指南与避坑要点,是学习医疗电子设备设计的优秀实践案例。

weixin_30600615的博客 327

Fragment精炼详解

一、前期基础知识储备 (1)上官方文档:Fragment public class Fragment.A Fragment is a piece of an application's user interface or behavior that can be placed in an Activity. Interaction with fragments is done through ...

Chin_Style的博客 1135

c# U盘禁用---守护进程(插入,拔出,卸载等操作)

一、简介 传统的对U盘禁用,我们多采用修改注册表的方式,详情参考:https://blog.csdn.net/qq_25372599/article/details/79815407;本文将介绍一种其他的方式–后台守护程序。其原理非常简单:当守护程序检测到U盘的插入信号,我们自动卸载U盘,致使系统无法识别U盘,达到禁用U盘的效果。 二、程序设计 2.1 变量定义 strin...

星星之火燃亮码空 2846

Yolov2 训练时anchor是如何使用的?build_target

0.简略描述 1.将真值检测框变换到特征图尺度上 2.计算以特征图每个网格中心为中心点时所有锚框与真值检测框的交并比 3.取与真值检测框交并比最大的锚框的id,及真值检测框中心所在cell的id,有此,可将真值检测框与预测结果对应起来 4.计算位置回归损失,置信度损失,分类损失 1,网络的输出 图1 yolov2 网络对于检测框位置大小的输出是: 对于1个batch网络的输出的shape为[batch_size, H*W*num_anchors, 5+num_classes], 其中: num_

机器人视觉感知 2818

Android_Fragment_Fragment详解

本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/12239349 1.Fragment概述 在一个Activity中, Fragment代表UI的一个部分或者一个行为。一个Activity可以结合多个Fragment对象,也可以在多个activity中使用相同Fragment字节码对应的不同对象。

lostinai的专栏 781

实测对比:DeepSeek、豆包、千问三大AI模型生成测试用例谁更强?(附完整代码)

本文通过实测对比了DeepSeek、豆包、千问三大AI模型在生成测试用例方面的表现。文章提供了完整的Python代码实现,详细分析了各模型在用例完整性、准确性、边界覆盖及幻觉控制等维度的差异,并分享了工程化集成与多模型融合等优化策略,旨在帮助测试团队选择合适工具以提升工作效率。

ik6789012的博客 946

android fragment学习笔记

fragment相当于网页中的块,一个activity中可以包含多个fragment,互相独立,互不干扰。但可以通过定义回调接口的方式来实现相互通讯。 每个fragment寄生在activity中,当activity生命周期为onPause()时,其包含的每个fragment也会调用各自的onPause()方法。 fragment可以在布局文件中定义,可以针对不同的屏幕大小设计不同的布局文件。

1万+

ADS2020实战:村田电感.s2p与.mod文件导入全流程对比(附仿真结果差异分析)

本文详细对比了ADS2020中村田电感的.s2p与.mod文件导入流程及仿真结果差异,重点分析了两种模型在低频段和高频段的精度表现。通过实际案例展示.s2p文件在高频仿真中的优势,以及.mod文件在低频和非线性特性模拟中的准确性,为射频电路设计提供模型选择策略和混合仿真技巧。

weixin_29289821的博客 519

ROS Motion Planning运动规划库安装方法及进阶使用方法详细介绍

​今天偶然发现了一个优质的运动规划库:ai-winter/ros_motion_planning,比较适合从事ROS移动机器人运动规划研究领域的小伙伴学习和使用,相比于莱斯大学Kavraki实验室提供的开源的著名运动规划库OMPL、或着我之前介绍过的zhm-real开源的zhm-real/MotionPlanning和zhm-real/PathPlanning运动规划库,今天介绍的ROS Motion Planning运动规划库与ROS机器人中常用的Navigation导航框架的兼容性更好,库中的运动规划

慕羽★的博客 5577

android的fragment用法,Android Fragment用法知识点的讲解

Android Fragment用法的讲解碎片,它的出现是为了更好展示UI的设计,让程序更加得到充分的展示。Fragment的出现,如微信的额主界面包含多个Fragment,使得微信功能更加简洁明了。Fragment组件Fragment是Android 3.0的时候被引入的,主要目的是为了给大屏幕(如平板电脑)添加动态和灵活的UI支持。利用Fragment实现更好的用户体验。Fragment加载静...

weixin_29454359的博客 1574

《QGIS快速入门与应用基础》079:KML/KMZ格式:Google Earth兼容

KML/KMZ是专为地理可视化设计的空间数据格式,原生兼容Google Earth,支持点线面要素标注与多媒体集成。KML为XML文本格式,KMZ是其压缩版本。该格式优势在于可视化表现力强、跨平台共享便捷,适合地理标注、路线分享等场景,但存在属性支持弱、大数据量处理效率低等局限。QGIS中可便捷加载和导出KML/KMZ数据,需注意编码设为UTF-8、勾选"导出样式"以保留可视化效果。建议中小规模标注数据使用KMZ格式,确保关联资源完整,提升共享效率。

LuckyHanMo的博客 771

Android studio Fragment用法

利用Fragment类将程序界面分成数个区域,这些不同区域的程序界面可以各自显示或隐藏,以适应不同屏幕尺寸的设备,这种Fragment类型的程序接口具有以下特性: 1. 程序运行界面可以由多个Fragment组成 2. 每一个Fragment都有各自独立的运行状态 3. 在程序运行的过程中,Fragment可以动态加入和移除 在程序中使用Fragment需要完成以下几个步...

smarterr的博客 1万+

【ComfyUI】Wan2.2 Animate 背景保留动作迁移视频生成

本文介绍了一个基于ComfyUI的高精度视频生成工作流"Wan2.2 Animate",该系统融合动作捕捉、图像拼接和LoRA加权等技术,能自动识别人脸并完成精准动作迁移,同时保持背景稳定。工作流采用模块化设计,包含输入提取、图像融合、模型加载等关键节点,核心模型Wan2.2-Animate-14B支持fp8精度与BlockSwap控制。流程分为图像输入、动作提取、多图合成等五个阶段,通过文本提示编码器和图像语义编码器实现语义驱动的动作生成,最终输出高质量视频,适用于虚拟形象驱动和

Mr数据杨 2266

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android studio 动态fragment的用法

Android studio:动态fragment的用法 fragment的使用时Android的基础,它有两种用法,第一个就是静态的fragment。第二个则是动态的fragment。 静态fragment直接在layout创建你想要的fragment的XML的文件,然后在你的Java包里面创建对应fragment的class文件 布局代码如下所示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="h

weixin_45934604的博客 3050

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android中Fragment的用法

Fragment的出现主要是为了解决安卓设备尺寸多样化后界面的显示问题。Fragment比Activity较轻量级,可以提供与用户交互的界面并且有自己的生命周期,也不用在AndroidManifest.xml中注册,但它必须嵌套在Activity中使用。之前需要使用多个Activity显示的内容,现在可以用一个Activity嵌套多个Fragment来实现。 1.静态Fragment的实现 从De...

HughZhao的博客 1080

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android笔记只Activity与Fragment之间通信

前言 正文之前先小唠几句,距离上次写博客已经快小半年了,之前的博客都是以记录为学习笔记为主,而这小半年没有产出,是需要反思的。反思的结果就是,这小半年我没多少进步,无论是在RN还是安卓原生开发的知识技术方面,都没有实质上的突破,以至于没有新的值得我记录为博客的干货。 俗话说,学海无涯,不进则退。因为这大半年基本上都从事着RN的相关开发,以至于把很多安卓原生的知识技能都落下了,之前关注的大佬博客...

加油,向未来! 2万+

【Fragment】安卓Android开发中的Activity、Fragment、Adapter

前面介绍了Activity,简单地说Activity代表着应用程序中的一个单独的屏幕或界面,用户可以与之交互。那么现在就再来了解一下Fragment。在安卓开发中,Fragment是一种可以嵌入到Activity中的可重用组件,用于构建灵活和模块化的用户界面。与Activity类似,Fragment具有自己的布局和生命周期,并且可以包含用户界面元素和逻辑。

weixin_67898144的博客 1528

Android中Fragment的高级用法

Android中Fragment的高级用法

Android应用开发工程师 1885

安卓Fragment使用详解

Fragment一、Fragment的概念和用法:(一)、概念:Fragment是在Android 3.0 (API level 11)开始引入新的API技术。为了提高代码重用性和改善用户体验,我们将Activity中的UI组件进行分组和模块化管理。这些分组后的UI组件就是Fragment。一个Activity页面中可以包含多个Fragment模块,而同一个Fragment模块也可以被多个Activity使用。每个Fragment有自己的布局,有自己的生命周期。

liuliuhelingdao的博客 6099

【Android】Fragment的基本用法、Fragment和活动间的通信、Fragment的生命周期、动态加载布局的技巧

Fragment的基本用法、Fragment和活动间的通信、Fragment的生命周期、Fragment的四种状态和回调、动态加载布局的技巧

摸鱼小小虫的博客 5986

android fragment详解,安卓Fragment使用详解

Fragment是在安卓3.0版本中添加的,主要是为了解决安卓设备尺寸多样化后界面的显示问题。Fragment比Activity较轻量级,也可以提供与用户交互的界面并且有自己的生命周期,也不用在Manifest.xml中注册但它必须嵌套在Activity中使用。之前需要使用多个Activity显示的内容,现在可以用一个Activity嵌套多个Fragment来实现。下面就来说说Fragment的知...

weixin_36379084的博客 1615

【Activity】安卓Android开发中的Activity、Fragment、Adapter

我最近刚刚接触Android开发,对这个方面的开发可以说是一无所知,所以想着尝试开始理解。在这段时间的摸爬滚打里面,我发现了其中Activity、Fragment、Adapter三种非常常用,所以在这里进行一下我自己的理解。

weixin_67898144的博客 2792
上一篇: Java 用栈处理四则运算
下一篇: 找出360云盘的离线下载
KingLearnJava
博客等级 码龄12年 93粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值