Activity和Fragment

一、Activity生命周期
    运行状态,位于前台,用户可见,可以获得焦点
    暂停状态,位于前台,可见,不能获得焦点
    停止状态,不可见,失去焦点
    销毁状态,该Activity结束或所在进程被结束
系统回调的方法:
    onCreate(Bundle status):创建时调用,只会调用一次
    onStart():启动Activity时调用
    onResume():恢复时调用,当onStart()后一定会调用
    onPause():暂停状态调用
    onRestart():重启调用
    onStop():停止
    onDestroy():销毁Activity调用,只会调用一次
四种加载模式:
    standard:标准模式,每次都会为目标Activity创建新的实例,并添加到当前Task栈中,不会创建新的Task。
    singleTop:Task栈顶单例模式,与standard基本一致,差异在于当目标Activity位于栈顶时,不创建新的Activity。
    singleTask:Task内单例模式,同一个Task内只有一个实例,若没有这创建,若有,则移到栈顶
    singleInstance:全局单例模式,所有Task中创建一个全新的来加载
    
    在Activity配置文件中设置:

    android:exported="true"
    android:launchMode="singleInstance"


二、Fragment
    1.作为Activity的组成部分。通过getActivity()获取所在Activity,反之,通过FragmentManager的findFragmentById()或findFragmentByTag()获取Fragment。
    2.在Activity运行过程中,通过FragmentManager的add(),remove(),replace()动态添加删除。
    3.一个Activity可以组合多个Fragment;反之,一个Fragment也可以被多个Activity复用。
    4.Fragment可以响应自己输入事件,生命周期受所属Activity控制。
    
创建需要实现方法:
    onCreate();初始化想在Fragment中保持的必要组件
    onCreateView():绘制界面组建时回调,必须返回一个View作为Fragment显示的View
    onPause():离开Fragment时回调
    
提交给Activity的每组改变集合被叫做一个事务,并且你能使用FragmentTransaction中APIs来执行它。
每次调用replace方法时Fragment的生命周期会重走。这在现实开发中是不允许的。
解决方案:预先将Fragment加入集合中,切换时从集合取出Fragment添加到FragmentTransaction事务中,每次加入的时候判断是否已经添加到FragmentTransaction中,存在则调用show,并将上一个fragment隐藏。

Activity中:

    //初始化时添加到lis中
    fragmentArrayList = new ArrayList<Fragment>(3);
    fragmentArrayList.add(new Tab1Fragment());
    fragmentArrayList.add(new Tab2Fragment());
    fragmentArrayList.add(new Tab3Fragment());
        
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    //从FragmentTransaction事物获取之前添加的Fragment
    Fragment fragment = getSupportFragmentManager().findFragmentByTag(fragmentArrayList.get(currentIndex).getClass().getName());
    
    //判断此Fragment是否已经添加到FragmentTransaction事物中
    if (!fragment.isAdded()) {
        ft.add(R.id.fragment, fragment, fragment.getClass().getName());
    } else {
        ft.show(fragment);
    }
    ft.commit();

这样做的好处是,每个Fragment切换只进行一次初始化。

根据屏幕大小加载Fragment格式(平板/电话)
在\res\values-large下建立refs.xml引用资源文件,专门用于定义各种应用资源。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- 定义activity_book_list实际引用@layout/activity_book_twopane资源 -->
    <item type="layout" name="activity_book_list">
        @layout/activity_book_twopane</item>
</resources>

在Activity初始化时,

// 指定加载R.layout.activity_book_list对应的界面布局文件
// 但实际上该应用会根据屏幕分辨率加载不同的界面布局文件
setContentView(R.layout.activity_book_list);

Fragment生命周期如Activity,回调函数:
onAttach():当Fragment被添加到Activity时被回调,只会被调用一次。
onCreate(Bundle status):创建Fragment调用,只调用一次
onCreateView():创建、绘制Fragment的view回调,Fragment将显示其View
onActivityCreated():当Fragment所在的Activity被启动完成后回调
onStart():启动
onResume():恢复
onPause():暂停
onStop():停止
onDestroyView():销毁Fragment所包含的View组件调用
onDestroy():销毁Fragment回调,只调用一次
onDetach():将该Fragment从Activity中删除、替换完成时回调,在onDestroy()后一定回调此方法
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ActivityFragmentAndroid 应用程序中两个重要的组件,它们之间有以下区别: 1. 生命周期:Activity 是一个完整的屏幕界面,具有自己的生命周期。当用户与应用程序的不同部分进行交互时,Activity 可以被创建、启动、停止、恢复、暂停和销毁。而 FragmentActivity 的一部分,它具有自己的生命周期,但它的生命周期与它所依赖的 Activity 相关联。因此,当 Activity 被销毁时,与之相关的 Fragment 也会被销毁。 2. 可重用性:Fragment 可以重复使用,可以在多个 Activity 中使用,从而提高了代码的可重用性。而 Activity 是不能重用的,每个 Activity 只能在一个应用程序中使用。 3. UI 组件:Activity 可以包含多个 Fragment,每个 Fragment 都有自己的 UI 组件。这种方式可以使应用程序的 UI 更加模块化,并且开发人员可以更容易地管理和组织 UI。然而,Activity 通常只能包含一个 UI 组件(例如一个布局)。 4. 通信:Activity 之间可以通过 Intent 进行通信,而 Fragment 之间通过其所依赖的 Activity 进行通信。因此,如果要在两个 Fragment 之间共享数据或通信,需要通过它们所依赖的 Activity 进行传递。 总的来说,ActivityFragment 都是 Android 应用程序中重要的组件,它们各自有自己的用途和优点。在开发过程中,开发人员需要根据实际情况选择适当的组件来实现应用程序的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值