Android Fragment实践(二) - Fragment的生命周期

Fragment的生命周期详解 近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下。 阅读详情

一,Fragment简介:

Fragment,即碎片、片段。是google在Android 3.0系统中引入的概念,它和Activity的功能差不多,Fragment可以让AndroidUI变得更加灵活。Fragment有自己的生命周期,它需要由Actitity来承载,即Fragment的生命周期由Activity来管理。

二,Fragment的生命周期:

Activity有自己的生命周期,Fragment也有自己的生命周期,而且,Fragment的生命周期由Activity来管理。

Fragment的生命周期如下图所示:

其中,fragment是添加在Activity中的。

 Fragment的生命代码演示:

TopFragment.java:

package com.test.mydemofrag1.ui;

import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.test.mydemofrag1.MainActivity;
import com.test.mydemofrag1.R;

public class TopFragment extends Fragment {
    private static final String TAG = "TopFragment";
    private View convertView;
    private TextView mTextview;
    private Button mButton;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        Log.i(TAG, "onAttach===========");
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "onCreate===========");
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        Log.i(TAG, "onCreateView===========");

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.fragment_top, container, false);
            initView();
            initClient();
        }
        return convertView;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        Log.i(TAG, "onActivityCreated===========");

        super.onActivityCreated(savedInstanceState);

        MainActivity activity = (MainActivity) getActivity();
        activity.putFragment(this);

    }

    @Override
    public void onResume() {
        super.onResume();
        Log.i(TAG, "onResume===========");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.i(TAG, "onPause===========");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.i(TAG, "onStop===========");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy===========");

    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.i(TAG, "onDestroyView===========");

    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.i(TAG, "onDetach===========");

    }

    @Override
    public void onStart() {
        super.onStart();
        Log.i(TAG, "onStart===========");
    }

    private void initView() {
        mTextview = convertView.findViewById(R.id.text_top);
        mButton = convertView.findViewById(R.id.button_top);
        Log.i(TAG, "[initView]===" + mTextview.getText());
    }

    public void updateView(String data) {
        mTextview.setText(data);
    }

    private void initClient() {
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MainActivity activity = (MainActivity) getActivity();
                BottomFragment bottomFragment =(BottomFragment) activity.getFragment(1);

//                BottomFragment bottomFragment = (BottomFragment) FragmentFactory.getFragment((MainActivity) getActivity(),"BottomFragment");
                bottomFragment.updateView("被topFragment更新");
            }
        });
    }
}

MainActivity:

package com.test.mydemofrag1;
import android.app.Activity;
import android.os.Bundle;
import android.app.Fragment;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "[onCreate]=======");

        setContentView(R.layout.activity_main);
    }

    @Override
    public void onAttachFragment(Fragment fragment) {
        super.onAttachFragment(fragment);
        Log.i(TAG, "onAttachFragment=====" + fragment);
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "onResume=====");

    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "onPause=====");

    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "onRestart=====");

    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart=====");

    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop=====");

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy=====");

    }
}

运行结果(生命周期演示):

com.test.mydemofrag1 I/MainActivity: [onCreate]=======
com.test.mydemofrag1 W/ResourceType: Attempt to retrieve bag 0x7f0f01cd which is invalid or in a cycle.
com.test.mydemofrag1 I/TopFragment: onAttach===========
com.test.mydemofrag1 I/MainActivity: onAttachFragment=====TopFragment{aaa19a0 #0 id=0x7f080161}
com.test.mydemofrag1 I/TopFragment: onCreate===========
com.test.mydemofrag1 I/TopFragment: onCreateView===========
com.test.mydemofrag1 I/TopFragment: [initView]===top
com.test.mydemofrag1 I/TopFragment: onActivityCreated===========
com.test.mydemofrag1 I/MainActivity: onStart=====
com.test.mydemofrag1 I/TopFragment: onStart===========
com.test.mydemofrag1 I/MainActivity: onResume=====
com.test.mydemofrag1 I/TopFragment: onResume===========

 退出时的运行结果(生命周期演示):

com.test.mydemofrag1 I/TopFragment: onStop===========
com.test.mydemofrag1 I/MainActivity: onStop=====
com.test.mydemofrag1 I/TopFragment: onDestroyView===========
com.test.mydemofrag1 I/TopFragment: onDestroy===========
com.test.mydemofrag1 I/TopFragment: onDetach===========
com.test.mydemofrag1 I/MainActivity: onDestroy=====

Fragment生命周期说明:

其中大多数程序必须使用Fragments 必须实现的三个回调方法分别为:

onCreate

   系统创建Fragments 时调用,可做执行初始化工作或者当程序被暂停或停止时用来恢复状态,跟Activity 中的onCreate相当。 

onCreateView

   用于首次绘制用户界面的回调方法,必须返回要创建的Fragments 视图UI。假如你不希望提供Fragments 用户界面则可以返回NULL。 

onPause 

    当用户离开这个Fragments 的时候调用,这时你要提交任何应该持久的变化,因为用户可能不会回来。

自从引入Fragment后,由于其扩展性,灵活性,易用性的特点,这个组件几乎风靡AndroidApp中。 


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

相关推荐

Android 生命周期Activity、Fragment等

生命周期就是你的安卓组件的“操作指南”。onCreate()第一次设置,只做一次。onResume()界面活跃,启动所有需要实时互动的功能。onPause()界面暂停,停止耗费资源的实时功能,快速保存临时数据。onStop()界面不可见,释放更多资源,保存持久数据。界面销毁,彻底清理所有残留。掌握这些,并善用 AAC 提供的工具,你就能编写出更稳定、更高效、用户体验更佳的安卓应用!

qq_38998818的博客 633

Fragment生命周期详解

序言 Fragment从Android v3.0版本开始引入的,随着界面布局的复杂化,处理起来也更加的复杂,引入Fragment可以把Activity拆分成多个部分。一个Activity可以同时组合多个Fragment,一个Fragment也可被多个Activity 复用。Fragment可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期控制。...

Caesar Home 2万+

宜搭子表单(自定义页面全部展示)

效果:增加自定义页面添加表格组件,配置数据源变量: formUuid'表单编码'变量: pageSize10变量: currentPage1。

2301_80286061的博客 2276

Fragment的生命周期

1:生命周期,Fragment的生命周期看起来和Activity的生命周期类似,但是多了一些,因为Fragment的生命周期是和其关联的Activity有关。 (1)onAttach(Context context):在Fragment和Activity关联上的时候调用,且仅调用一次。在该回调中我们可以将context转化为Activity保存下来,从而避免后期频繁调用getAtivity()获取Activity的局面,避免了在某些情况下getAtivity()为空的异常(Activity和Fragment

weixin_44941105的博客 4万+

STM32F4的sct文件理解

原文地址http://blog.sina.com.cn/s/blog_898f36590100ya2l.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

weixin_34008805的博客 995

ODBC 连接数据库 SQL server 2008

1、打开【控制面板】-> 【系统和安全】 -> 【管理工具】-> 【数据源(ODBC)】  2、双击【数据源(ODBC)】-> 选中【系统DSN】 3、单击【添加】,会弹出如下对话框,选中【SQL server】->【完成】 4、弹出如下对话框,在【名称】中填入数据源名称 例如:我命名为: LocalServer,在【服务器】中填入计算机名或者IP地址,我连接

Christine的专栏 8516

Android中的底部菜单框架(Fragment)

今天,我将总结一下Android应用中大家经常见到的底部导航栏的几种实现!   一。TabHost + RadioGroup实现方式 在我们平时开发过程中使用的TabHost是在上方,这里我们简单修改了一下的布局,让叶片放到了底部。 main.xml view sourceprint? 01.xml version="1.0" encoding="utf-8"?

mypanlong的专栏 1196

cadence17.4和16.6同时安装无法使用的问题

经过对报错的问题分析,发现还是17.4的lic文件和16.6的不一样,16.6的版本总是无法找到自己对应的lic文件。卸载了,重新单独安装16.6,这里就是正确的。包括使用这些工具去修复这些问题,都无法接近。已经放弃了,使用哪个版本就安装 哪个版本。这个也无法解决问题。

D_Katter的博客 2322

最简单的android底部导航栏 + Fragment的实现方式

1、android.support.design.widget.BottomNavigationView 是android原生的一个底部导航框架区别于gitthub上start数量很多的com.roughike:bottom-bar:2.3.1'(github地址:点击打开链接):①android原生的bottomNavigationView初始代码很少也很简单,掌握起来也很快。②在不使用View...

sinat_34153600的博客 6895

网规第三版:第4章网络资源设备(完结)

第 4 章 网络资源设备 调整内容: 更新主流网络设备(交换机、路由器、防火墙)的技术参数与选型标准 增加国产化网络设备与信创产品的相关内容 精简已淘汰的设备类型与技术指标

鹿鸣天涯 267

基于Simulink雷达系统建模仿真(附源码)

此示例显示如何设置由发射器、带目标的信道和接收器组成的雷达系统仿真。一、系统架构该系统包括:雷达脉冲发生器,以 2% 占空比(导通时间 = 2 ms,周期 = 100 ms)输出功率为 1 mW 的啁啾声。RF发射器部分由滤波器和组成,使用RF模块集电路包络库模块实现。由于滤波器是线性器件,放大器是非线性器件,因此它们被分成两个独立的子系统。这种分离允许在每个子系统中使用不同的仿真频率集。这种分离还允许在更快的仿真速度和级联链中可用的级间负载效应损失之间进行权衡。

珞瑜的博客 4580

【Android Fragment】Fragment基础

1、fragment “分段”、“碎片”的意思,一般与Activity一起使用,嵌套在activity中表示为Activity界面的一部分。 2、它具有自己的生命周期,能接收自己的输入事件,并且您可以在 Activity 运行时添加或移除片段(有点像您可以在不同 Activity 中重复使用的“子 Activity”)。 3、当您将片段作为 Activity 布局的一部分添加时,它存在于 Act...

dev晴天的博客 8838

Unity3D 加密 Assembly-CSharp.dll (Android平台) 防止反编译

0、加密的原理 Unity3D 是基于 Mono的,我们平时写的 C# 脚本都被编译到了 Assembly-CSharp.dll ,然后 再由 Mono 来加载、解析、然后执行。 Mono 加载 Assembly-CSharp.dll 的时候就是读取文件到内存中,和平时读取一个 游戏资源 文件没什么区别。 为了防止别人破解,我们会对游戏资源加密,简单点的 比如修改文件的一个字节 或者 位移一下

Circle 8719

学习 Android(十)Fragment的生命周期

Android 的 Fragment 是一个具有独立生命周期的可重用 UI 组件,能够在运行时动态添加、移除和替换,支持单 Activity 多界面、动态布局和响应式设计。Fragment 的生命周期与 Activity 紧密关联,但包含更多与视图相关的回调方法,如 onAttach()、onCreateView()、onViewCreated() 等。掌握这些生命周期方法有助于在适当的阶段执行初始化、资源绑定、状态保存与释放操作,避免内存泄漏和 UI 崩溃。通过合理使用 Fragment 的生命周期,开发

m0_56334538的博客 4389

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Android】Fragment生命周期详解

本文总结了Fragment的生命周期方法及其功能,包括onAttach、onCreate、onCreateView等关键回调。通过官方生命周期图和个人整理的表格,详细说明了每个方法对应的阶段和作用,例如onAttach用于获取Activity引用,onCreateView用于创建视图等。文章还提供了示例代码,展示了一个简单的Fragment实现,其中包含视图初始化和点击事件处理。通过日志输出验证了各生命周期方法的调用顺序。

阿华的博客 1651

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android Fragment 生命周期

Android --Fragment 基础,生命周期

CongPong的博客 9169

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android Fragment生命周期

Android Fragment 生命周期 在Android 3.0中,Fragment作为一个重要的组件,被添加进来,这个类在  android.app.Fragment; 中,可以直接继承Fragment 创建一个Fragment类, 当然Fragment也是可以在低版本中兼容,在android-support-v4.jar中包含一个FragmentActivity. 可以直接继承Frag

WCCchangchun的博客 6434

Android学习|Fragment——03.Fragment的生命周期

Android学习|Fragment——03.Fragment的生命周期一、Fragment生命周期图二、不同操作下fragment周期状态 一、Fragment生命周期图 二、不同操作下fragment周期状态

weixin_52551903的博客 3423

Android Activity与Fragment生命周期变化

Q1: Activity和Fragment生命周期如何联动?答创建阶段Activity的onCreate()触发Fragment的Activity的onStart()触发Fragment的前台交互Activity的onResume()触发Fragment的onResume()Activity的onPause()触发Fragment的onPause()后台阶段Activity的onStop()触发Fragment的返回时Activity的触发Fragment的销毁阶段Activity的。

qq_45906596的博客 1148

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

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

weixin_67898144的博客 1528

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

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

weixin_36379084的博客 1615

Android Fragment核心原理与最佳实践:从生命周期到通信架构

在Android应用开发中,UI组件的模块化与复用是构建复杂界面的关键。Fragment作为Android架构的核心组件,实现了UI的模块化封装,其生命周期管理与宿主Activity紧密耦合又相对独立,通过onCreateView、onViewCreated、onDestroyView等回调形成完整的视图管理循环。理解Fragment的生命周期原理,能有效避免内存泄漏和视图状态异常,这是构建稳定Android应用的基础。在技术价值层面,Fragment支持动态组合与灵活布局,是实现响应式设计、适配多屏幕尺寸

weixin_34417200的博客 537

Android开发 Fragment的生命周期的介绍

文章目录1、Fragment的生命周期的介绍2、Fragment生命周期的特点3、Fragment使用建立与使用方法 1、Fragment的生命周期的介绍 fragment和activity一样,有四种状态,分别为活动状态(用户可见并且可以获取焦点)、暂停状态(部分可见,但不可获得焦点)、停止状态(完全不可见,无法获取焦点)、销毁状态(删除fragment或依附的activity被销毁)。 生命周...

Wantfly9951的博客 4304

【Android基础】Fragment 详解之Fragment生命周期

上一篇文章简单介绍了一下Fragment,这一篇文章会详细的说一下Fragment的生命周期和创建一个用户界面。 Fragment的主要功能就是创建一个View,并且有一个生命周期来管理这个View的创建和销毁。Fragment的生命周期与Activity的生命周期类似,都会有一些回调方法,你所做的工作就是利用好这些生命周期方法,在恰当的方法中做恰当的工作。 Fragment的生命周期

Cwuhao的专栏 1156

InterviewQuestion解析:Android中的Fragment与Activity生命周期终极指南

在Android应用开发中,Fragment和Activity的生命周期管理是每个开发者必须掌握的核心知识点。无论是新手入门还是资深开发,理解Fragment与Activity的生命周期对于构建稳定、高效的Android应用至关重要。本文将深入解析Android中Fragment与Activity生命周期的完整流程,帮助您全面掌握这一面试常考点。 ## Fragment与Activity生命周期

gitblog_00235的博客 997
上一篇: Android Fragment实践- ViewPager +Fragment实现页面滑动效果
下一篇: Android Fragment实践(三)— 使用Fragment + Loader实现异步加载
liranke
博客等级 码龄20年 4939粉丝 594原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值