首页 > 其他分享 >26. Fragment生命周期

26. Fragment生命周期

时间:2022-09-19 08:22:05浏览次数:105  
标签:26 生命周期 dingjiaxiong Fragment void fragment Override public Log

26. Fragment生命周期

26.1 Fragment生命周期

在这里插入图片描述

onAttach()/onDetach():绑定/解绑

onCreate()/onDestroy():创建/销毁

创建时,解析bundle

onCreateView()/onDestroyView():对UI的创建/销毁

onActivityCreated():意味着Activity已经创建

onStart()/onStop():启动/停止

onResume()/onPause:恢复/暂停

26.2 代码感受fragment生命周期
package com.dingjiaxiong.myfragmentmanagers;

import android.content.Context;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

public class BlankFragment1 extends Fragment {


    private View rootView;

    public BlankFragment1() {
        // Required empty public constructor
    }


    private IFragmentCallBack fragmentCallBack;
    public void setFragmentCallBack(IFragmentCallBack callBack){
        fragmentCallBack = callBack;
    }


    //绑定
    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        Log.e("dingjiaxiong", "onAttach: ");
    }

    //创建
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //获取bundle
        Bundle bundle = this.getArguments();
        //获取数据
        String s = bundle.getString("message");
        Log.e("dingjiaxiong", "onCreate: " + s);

        Log.e("dingjiaxiong", "onCreate: ");

    }

    //创建UI
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        if(rootView == null){
            rootView = inflater.inflate(R.layout.fragment_blank1, container, false);
        }
        Button button = rootView.findViewById(R.id.btn3);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//                fragmentCallBack.sendMsgToActivity("Hello,我来自fragment");

                String msg = fragmentCallBack.getMsgFromActivity("null");
                Toast.makeText(BlankFragment1.this.getContext(),msg,Toast.LENGTH_SHORT).show();

            }
        });
        Log.e("dingjiaxiong", "onCreateView: ");
        return rootView;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.e("dingjiaxiong", "onActivityCreated: ");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.e("dingjiaxiong", "onStart: ");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.e("dingjiaxiong", "onResume: ");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.e("dingjiaxiong", "onPause: " );
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.e("dingjiaxiong", "onStop: " );
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.e("dingjiaxiong", "onDestroyView: " );
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.e("dingjiaxiong", "onDestroy: " );
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.e("dingjiaxiong", "onDetach: " );
    }
}

每个生命周期中都打印一个日志

在这里插入图片描述

  1. 打开界面:

    onCreate() → onCreateView() → onActivityCreated() → onStart()→ onResume()

  2. 按下主屏键

    在这里插入图片描述

    onPause() → onStop()

  3. 重新打开界面

    在这里插入图片描述

onStart() → onResume()

         4按后退键

在这里插入图片描述

整个应用退出

onPause() → onStop() → onDestroyView() → onDestroy() → onDetach()

26.3 添加管理栈后

在这里插入图片描述

再次运行程序

创建

在这里插入图片描述

切换fragment

在这里插入图片描述

和按下主屏键不同,多了一个onDestroyView(),因为替换了,UI就需要销毁

此时按下返回键

在这里插入图片描述

重新创建UI

当fragment已经被覆盖,按下主屏键,没有任何日志,因为此时UI已经被销毁了

在这里插入图片描述

回来也没有反应。

此时按返回键

在这里插入图片描述

重新创建UI视图。

退出程序。

在这里插入图片描述

26.4 fragment生命周期总结
  • 将来开发者会围绕fragment生命周期花很多时间解决问题
  • fragment的使用一定是在需要在生命周期函数onAttach与onDetach之间
  • fragment的使用一定要遵守生命周期管理的规则,在正确的地方书写恰当的代码。

标签:26,生命周期,dingjiaxiong,Fragment,void,fragment,Override,public,Log
From: https://www.cnblogs.com/55zjc/p/16706493.html

相关文章

  • 24. Fragment的产生、使用方法、静态(动态)添加fragment
    24.Fragment的产生、使用方法、静态(动态)添加fragment24.1Fragment的产生Android3.0之后不同的Fragment运行在同一个Activity之上。24.2什么是Fragment具备生命周......
  • 25. Activity与Fragment通信
    25.Activity与Fragment通信25.1Activity与Fragment通信原生方案:Bundle如何让Activity和BlankFragment1完成通信Activity中://定义一个bundleBundlebundle=newB......
  • ESP8266升級SDK到V3.0版本編譯報錯
    編譯報錯信息bin/libmain2.a(app_main.o):Infunction`user_uart_wait_tx_fifo_empty':(.irom0.text+0x678):undefinedreferenceto`user_pre_init'bin/libmain2.a......
  • ABC 269 C - Submask(dfs+位运算)
    C-Submask(dfs+位运算)题目大意:给定一个十进制的数字,让我们求出它的二进制下的1可以改变时候的数字SampleInput111SampleOutput10123891011Thebi......
  • ABC 268 D(无耻)
    $-1$天……题面Takahashi有$N$个组成他的全名的单词(比如真实世界中,$N=2$,字符串是“Naohiro”和“Takahashi”)。这些单词分别是$S_1,S_2,S_3,\cdots,......
  • AtCoder Beginner Contest 268
    E-ChineseRestaurant(Three-StarVersion)假设旋转\(x\)次时,\(n\)个人失望值的总和为\(c_x\),那么只要能求出\(c_x,0\lex<n\)就可以包含所有情况,然后再取......
  • ABC269
    DContent给你若干个点和相邻点的定义,问你图中有几个连通块。Sol连通用并查集维护,就是这里的相邻有点怪。Code#includeusingnamespacestd;constint_=1005;int......
  • AtCoder Beginner Contest 269 (A-F)题解
    A-AnywayTakahashi这里我还是关了ll的C开了忘了关害的F多了一发罚时#include<bits/stdc++.h>usingnamespacestd;constintN=3e5+10;constintM=9982443......
  • AtCoder Beginner Contest 269
    咕咕咕咕咕。F-NumberedChecker首先矩形容斥,把一个询问拆分成4个询问。现在只需要解决:左上角为\((1,1)\),右下角为\((x,y)\)的矩形区域和这一问题。把列数为奇......
  • ABC267 - C,D Solutions
    目录ABC267-C,DSolutionsC-Index×A(Continuousver.)ProblemStatementSolutionImplementationD-Index×A(NotContinuousver.)ProblemStatementSolutionImp......