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

一,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中。 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

liranke

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

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

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

打赏作者

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

抵扣说明:

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

余额充值