Android基础(五)Fragment的生命周期

目录

问题描述

问题分析 

一、启动fragment1时,fragment1和activity的生命周期状态。

二、 按home时,两者(fragment1和activity)生命周期的状态。

三、 按back时,两者(fragment1和activity)的状态。

四、 从fragment1 跳转到fragment2时, fragment1的生命周期状态是什么?

 五、从fragment2返回fragment1时,是什么?

代码 

MainActivity.java

BlankFragment1.java

BlankFragment2.java


问题描述

①启动fragment1时,fragment1和activity的生命周期状态。

②按home时,两者(fragment1和activity)生命周期的状态。

③按back时,两者(fragment1和activity)的状态。

④从fragment1 跳转到fragment2时, fragment1的生命周期状态是什么?

⑤从fragment2返回fragment1时,是什么?

附:按crtl+O可以快速搜索on函数

问题分析 

一、启动fragment1时,fragment1和activity的生命周期状态。

打开界面:onCreate()-->onCreateView()-->onViewCreated()-->onStart()-->onResume()

验证如下:

二、 按home时,两者(fragment1和activity)生命周期的状态。

按主屏键:onPause()-->onStop()

验证如下:

三、 按back时,两者(fragment1和activity)的状态。

onPause-->onStop-->onDestroyView()-->onDestroy()-->onDetach()

四、 从fragment1 跳转到fragment2时, fragment1的生命周期状态是什么?

 五、从fragment2返回fragment1时,是什么?

代码 

附:所以代码均在DynamicFragment项目中。

MainActivity.java

package com.example.dynamicfragment;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    RadioGroup rg;
    RadioButton b1,b2,b3,b4;

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("TAG","Activity:onCreate");
        setContentView(R.layout.activity_main);

        rg=findViewById(R.id.rg1);
        b1=findViewById(R.id.rb1);
        b2=findViewById(R.id.rb2);
        b3=findViewById(R.id.rb3);
        b4=findViewById(R.id.rb4);

        rg.setOnClickListener(this);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
        b3.setOnClickListener(this);
        b4.setOnClickListener(this);

    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("TAG","Activity:onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("TAG","Activity:onResume");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("TAG","Activity:onRestart");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("TAG","Activity:onPaused");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("TAG","Activity:onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("TAG","Activity:onDestroy");
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Log.d("TAG","Activity:onBackPressed");
    }

    @Override
    public void onClick(View view) {
           String i= getResources().getResourceEntryName(view.getId());
           switch(i){
               case "rb1":
                  // Bundle bundle=new Bundle();
                  // bundle.putString("msg","lalala");
                   BlankFragment1 fb= new BlankFragment1();
                   // Fragment fb = new BlankFragment1();
                   // fb.setArguments(bundle);//传参数
                   fb.setIFragmentCallback(new IFragmentCallback() {
                       @Override
                       public void sendMsgToAct(String str) {
                           Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
                       }

                       @Override
                       public String receiveMsgFromAct() {
                           return "receive";
                       }
                   });

                   entry_fragment(fb);
                   break;
               case "rb2":
                   entry_fragment(new BlankFragment2());
                   break;
               case "rb3":
                   entry_fragment(new BlankFragment3());
                   break;
               case "rb4":
                   entry_fragment(new BlankFragment4());
                   break;
               default:
                   throw new IllegalStateException("Unexpected value:" +view.getId());
           }
    }




    private void entry_fragment(Fragment f) {
        FragmentManager fm =getSupportFragmentManager();
        FragmentTransaction ft=fm.beginTransaction(); //开始交易
        ft.replace(R.id.fl,f);
        ft.addToBackStack(null); 
        ft.commit();
    }
}

BlankFragment1.java

package com.example.dynamicfragment;

import android.annotation.SuppressLint;
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;

import java.util.zip.Inflater;

/**
 * A simple {@link Fragment} subclass.
 * Use the {@link BlankFragment1#newInstance} factory method to
 * create an instance of this fragment.
 * @noinspection UnresolvedClassReferenceRepair
 */
public class BlankFragment1 extends Fragment {
    Button bt3,bt4;
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

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

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment BlankFragment1.
     */
    // TODO: Rename and change types and number of parameters
    public static BlankFragment1 newInstance(String param1, String param2) {
        BlankFragment1 fragment = new BlankFragment1();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }
     private IFragmentCallback callback;//定义接口
     public void setIFragmentCallback(IFragmentCallback i){callback=i;}

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("TAG","Fragment1:onCreate");
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
//        Bundle bundle=this.getArguments();
//        String str=bundle.getString("msg");
//        Log.d("fragment1",str);

    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        Log.d("TAG","Fragment1:onAttach");
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Log.d("TAG","Fragment1:onViewCreated");
    }

    @Override
    public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);
        Log.d("TAG","Fragment1:onViewStateRestored");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.d("TAG","Fragment1:onStart");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.d("TAG","Fragment1:onResume");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.d("TAG","Fragment1:onPause");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d("TAG","Fragment1:onStop");
    }

    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d("TAG","Fragment1:onSaveInstanceState");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.d("TAG","Fragment1:onDestroyView");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("TAG","Fragment1:onDestroy");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.d("TAG","Fragment1:onDetach");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        Log.d("TAG","Fragment1:onCreateView");
        // Inflate the layout for this fragment

        View root=inflater.inflate(R.layout.fragment_blank1, container, false);
        @SuppressLint({"MissingInflatedId", "LocalSuppress"})
        Button sendBT = root.findViewById(R.id.bt3);
        //告知return的内容
        sendBT.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                
                callback.sendMsgToAct("11.2victory");
            }
        });

        Button btr = root.findViewById(R.id.bt4);

        btr.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String recStr = (String) callback.receiveMsgFromAct();
                Toast.makeText(BlankFragment1.this.getContext(),recStr,Toast.LENGTH_SHORT).show();
            }
        });
        //Log.d(TAG,"OncreateView");
        return root;

        // return inflater.inflate(R.layout.fragment_blank1, container, false);
    }
}

BlankFragment2.java

package com.example.dynamicfragment;

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;

/**
 * A simple {@link Fragment} subclass.
 * Use the {@link BlankFragment2#newInstance} factory method to
 * create an instance of this fragment.
 */
public class BlankFragment2 extends Fragment {

    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

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

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment BlankFragment2.
     */
    // TODO: Rename and change types and number of parameters
    public static BlankFragment2 newInstance(String param1, String param2) {
        BlankFragment2 fragment = new BlankFragment2();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("TAG","Fragment2:onCreate");
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        Log.d("TAG","Fragment2:onAttach");
    }


    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Log.d("TAG","Fragment2:onViewCreated");
    }

    @Override
    public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);
        Log.d("TAG","Fragment2:onViewStateRestored");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.d("TAG","Fragment2:onStart");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.d("TAG","Fragment2:onResume");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.d("TAG","Fragment2:onPause");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d("TAG","Fragment2:onStop");
    }

    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d("TAG","Fragment2:onSaveInstanceState");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.d("TAG","Fragment2:onDestroyView");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("TAG","Fragment2:onDestroy");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.d("TAG","Fragment2:onDetach");
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        Log.d("TAG","Fragment2:onCreateView");
        return inflater.inflate(R.layout.fragment_blank2, container, false);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

零一壹一

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

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

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

打赏作者

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

抵扣说明:

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

余额充值