<Fragment>的生命周期

坚持住你的坚持,成功就在拐弯处。

/**
 * 生命周期的代码
 */
public class LifecycleFragment extends Fragment {

    public static final String TAG = "LifecycleFragment";

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        Log.d(TAG, "--onAttach--");

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "--onCreate--");
    }

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

        TextView tv = new TextView(getActivity());
        tv.setText("测试 fragment");
        tv.setGravity(Gravity.CENTER);
        tv.setTextSize(36);

        return tv;


    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        Log.d(TAG, "--onActivityCreated--");
    }

    @Override
    public void onStart() {
        super.onStart();

        Log.d(TAG, "--onStart--");
    }

    @Override
    public void onResume() {
        super.onResume();

        Log.d(TAG, "--onResume--");
    }

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

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

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

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

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


    public LifecycleFragment() {
    }


}

package com.test.lifecyclefragment.activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import com.test.lifecyclefragment.R;
import com.test.lifecyclefragment.fragment.LifecycleFragment;
import com.test.lifecyclefragment.fragment.SeconFragment;

/**
 * Fragment的生命周期
 *
 */
public class MainActivity extends AppCompatActivity {

    Button startActivity,addFragment,backFragment,replaceFragment,finish;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView(); //初始化控件
        initListener(); //初始化监听事件

    }

    private void initListener() {
        startActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //启动对话框风格Activity
                startActivity(new Intent(MainActivity.this,SecondActivity.class));
            }
        });

        //添加 Fragment
        addFragment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LifecycleFragment fragment = new LifecycleFragment();

                getFragmentManager().beginTransaction().replace(R.id.container,fragment).commit();
            }
        });

        //将替换前的Fragment 添加到 Back栈中
        backFragment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SeconFragment secFragment = new SeconFragment();
                getFragmentManager().beginTransaction()
                        .replace(R.id.container, secFragment)
                        .addToBackStack("aa")// 将替换前的Fragment添加到Back栈
                        .commit();
            }
        });

        //替换 Fragment
        replaceFragment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SeconFragment secFragment = new SeconFragment();
                getFragmentManager().beginTransaction().replace(R.id.container, secFragment).commit();
            }
        });

        // 为finish按钮绑定事件监听器
        finish.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View source)
            {
                // 结束该Activity
                MainActivity.this.finish();
            }
        });
    }

    private void initView() {
        startActivity = (Button) findViewById(R.id.start_dialog_activity);
        addFragment = (Button) findViewById(R.id.addFragment);
        backFragment = (Button) findViewById(R.id.backFragment);
        replaceFragment = (Button) findViewById(R.id.replaceFragment);
        finish = (Button) findViewById(R.id.finish);
    }
}

/**
 * 对话框风格 Activity
 */
public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView tv = new TextView(getApplication());
        tv.setText("对话框风格Activity");
        setContentView(tv);
    }
}

public class SeconFragment extends Fragment{
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        TextView tv = new TextView(getActivity());
        tv.setText("第二个 Fragment");
        tv.setGravity(Gravity.CENTER_HORIZONTAL);
        tv.setTextSize(36);
        tv.setTextColor(Color.BLUE);
        return  tv;

    }
}

点击 加载目标Fragment 按钮时会执行 –onAttach–,–onCreate–, –onCreateView–,–onActivityCreated–,–onStart–,-onResume–方法.
接着点击 启动对话框Activity的按钮 当前的Activity会进入暂停状态,该 Fragment也会进入暂停状态,会执行 –onPause–方法. 点击返回键,关闭对话框Activity. Fragment会执行onResume()方法.

继续点击 替换目标Fragment,并加入Back栈中 的按钮
–onPause– –onStop– –onDestroyView–方法.

点击 替换目标Fragment 按钮之后 执行 –onPause–, –onStop–,–onDestroyView–, –onDestroy–,–onDetach– 该Fragment 将会被完全结束,Fragment将进入”销毁”状态.


Fragment 的生命周期中,如下方法被系统回调.

  1. onAttach(Activity) 当Fragment被添加到 Activity时,被回调.该方法只会被调用一次.
  2. onCreate(Bundle) 创建Fragment 时被回调,该方法只会被调用一次.
  3. onCreateView(LayoutInflater, ViewGroup, Bundle) ;每次创建,绘制Fragment的View组件时回调该方法,Fragment将会显示该方法返回的view组件.
  4. onActivityCreated(Bundle) 当Fragment所在的Activity 被启动完成后回调该方法.
  5. onStart() 启动Fragment 时被回调.
  6. onResume() 恢复Fragment时被回调, onStart()方法后一定会回调 onResume()方法.
  7. onPause() 暂停时Fragment时被回调.
  8. onStop(); 停止Fragment 时被回调.
  9. onDestroyView() 销毁 该Fragment 所包含的View 组件时调用.
  10. onDestroy() 销毁 Fragment时被回调. 该方法只会调用一次.
  11. onDetach() 将该 fragment 从Activity中 被删除,被替换完成时,回调该方法. onDestroy方法后一定会回调 onDetach()方法.该方法只会调用一次.
内容概要:本文系统阐述了Java Persistence API(JPA)的核心概念、技术架构、核心组件及实践应用,重点介绍了JPA作为Java官方定义的对象关系映射(ORM)规范,如何通过实体类、EntityManager、JPQL和persistence.xml配置文件实现Java对象与数据库表之间的映射与操作。文章详细说明了JPA解决的传统JDBC开发痛点,如代码冗余、对象映射繁琐、跨数据库兼容性差等问题,并解析了JPA与Hibernate、EclipseLink等实现框架的关系。同提供了基于Hibernate和MySQL的完整实践案例,涵盖Maven依赖配置、实体类定义、CRUD操作实现等关键步骤,并列举了常用JPA注解及其用途。最后总结了JPA的标准化优势、开发效率提升能力及在Spring生态中的延伸应用。 适合人群:具备一定Java基础,熟悉基本数据库操作,工作1-3年的后端开发人员或正在学习ORM技术的中级开发者。 使用场景及目标:①理解JPA作为ORM规范的核心原理与组件协作机制;②掌握基于JPA+Hibernate进行数据库操作的开发流程;③为技术选型、团队培训或向Spring Data JPA过渡提供理论与实践基础。 阅读建议:此资源以理论结合实践的方式讲解JPA,建议读者在学习过程中同步搭建环境,动手实现文中示例代码,重点关注EntityManager的使用、JPQL语法特点以及注解配置规则,从而深入理解JPA的设计思想与工程价值。
在 Android 开发中,将 `<fragment>` 标签替换为 `FragmentContainerView` 可按以下步骤进行: #### 布局文件替换 在 XML 布局文件里,把 `<fragment>` 标签替换成 `FragmentContainerView`。以下是示例: 原本使用 `<fragment>` 标签的代码: ```xml <fragment android:id="@+id/myFragment" android:name="com.example.MyFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 替换为 `FragmentContainerView` 后的代码: ```xml <androidx.fragment.app.FragmentContainerView android:id="@+id/myFragment" android:name="com.example.MyFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` #### 代码适配 若在代码里有对该片段的操作,要确保使用正确的 `FragmentManager` 和 `FragmentTransaction` 来管理片段。示例如下: ```kotlin // 获取 FragmentManager val fragmentManager = supportFragmentManager // 开启事务 val fragmentTransaction = fragmentManager.beginTransaction() // 查找 FragmentContainerView val fragmentContainerView = findViewById<FragmentContainerView>(R.id.myFragment) // 若需要,可替换片段 fragmentTransaction.replace(R.id.myFragment, MyFragment()) // 提交事务 fragmentTransaction.commit() ``` #### 注意事项 - `FragmentContainerView` 是 AndroidX 库的一部分,所以要保证项目已添加 AndroidX 依赖。 - `FragmentContainerView` 提供了更好的生命周期管理和性能优化,推荐在新的项目中使用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值