前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android从零单排系列三十六】《Android四大组件——Fragment》

【Android从零单排系列三十六】《Android四大组件——Fragment》

作者头像
再见孙悟空_
发布2023-07-17 20:34:11
2990
发布2023-07-17 20:34:11
举报
文章被收录于专栏:【Android开发基础】

前言

小伙伴们,在上文中我们介绍了Android组件Activity,本文我们继续盘点介绍Android开发中另一个非常重要的组件Fragment。

一 Fragment基本介绍

Android Fragment是Android应用开发中的一种重要组件,用于构建灵活且可重用的用户界面模块。Fragment可以看作是Activity内部的一部分,具有自己的布局、生命周期和交互行为。

通过使用Fragment,可以将应用程序的界面划分为多个独立的模块,每个模块负责显示特定的UI内容和逻辑。这使得开发者能够更好地管理复杂的界面布局和响应用户交互。

Fragment有以下几个主要特点:

  1. 独立性:Fragment具有独立的生命周期,并且可以被添加到或移除出Activity,也可以在不同的Activity之间共享。
  2. 可嵌套性:一个Fragment可以包含另一个Fragment,形成层级结构,方便实现模块化的UI设计。
  3. 生命周期管理:Fragment的生命周期与其所附属的Activity相互关联,可以通过回调方法进行处理。
  4. 界面灵活性:Fragment可以拥有自己的布局文件,通过FragmentManager进行动态添加、替换和移除等操作,从而实现动态的界面切换和更新。

二 Fragment使用方法

使用Fragment需要以下步骤:

  1. 创建Fragment类:创建一个继承自Fragment的Java类,并实现必要的方法。其中包括onCreateView()方法用于创建和返回Fragment的布局。
  2. 定义Fragment布局:在res/layout目录下创建Fragment的布局文件,定义界面元素和样式。
  3. 在Activity中使用Fragment:
    • 在Activity的布局文件中添加一个占位符View,用于容纳Fragment。
    • 在Activity的Java代码中通过FragmentManager管理Fragment,常见操作有:
      • 动态添加Fragment: 使用FragmentTransaction的add()方法将Fragment添加到指定的View中。
      • 替换Fragment: 使用FragmentTransaction的replace()方法替换指定的View中的Fragment。
      • 移除Fragment: 使用FragmentTransaction的remove()方法将指定的Fragment从View中移除。
    • 可以通过获取FragmentManager并调用beginTransaction()开始一系列Fragment事务,然后使用commit()提交事务。
  4. 处理Fragment生命周期:在Fragment类中,可以重写一些生命周期回调方法,如onCreate()、onStart()、onResume()等,来处理与Fragment相关的逻辑和数据操作。

总结起来,使用Fragment的基本步骤是:创建Fragment类、定义Fragment布局、在Activity中管理Fragment,并处理Fragment的生命周期。

三 Fragment常见属性及方法

常见属性:

  1. getArguments(): 获取传递给Fragment的参数Bundle。
  2. getActivity(): 获取所属的Activity。
  3. getContext(): 获取上下文Context。
  4. getView(): 获取Fragment的根视图View。
  5. getResources(): 获取资源对象,例如字符串、颜色等。

常见方法(部分):

  1. onCreate(Bundle savedInstanceState): Fragment被创建时调用,可以初始化一些数据和设置。
  2. onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState): 创建Fragment的视图层次结构,通常在这个方法中通过LayoutInflater从布局文件中填充并返回Fragment的根视图View。
  3. onViewCreated(View view, Bundle savedInstanceState): 当Fragment的视图已经被创建后调用,可以进行与视图相关的初始化操作。
  4. onActivityCreated(Bundle savedInstanceState): 当所属的Activity的onCreate()完成后调用,可进行与Activity相关的初始化操作。
  5. onStart(): Fragment可见时调用。
  6. onResume(): Fragment获得焦点且可与用户交互时调用。
  7. onPause(): Fragment失去焦点且不再与用户交互时调用。
  8. onStop(): Fragment不可见时调用。
  9. onDestroyView(): Fragment的视图层次结构被移除时调用。
  10. onDestroy(): Fragment销毁时调用。
  11. onDetach(): Fragment与Activity解除关联时调用。

四 Fragment简单案例

以下是一个简单的Fragment使用案例,包括创建Fragment类、定义布局文件、在Activity中管理Fragment:

创建Fragment类:

代码语言:javascript
复制
public class MyFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        // 使用布局文件fragment_my.xml填充视图
        return inflater.inflate(R.layout.fragment_my, container, false);
    }
}

定义布局文件fragment_my.xml:

代码语言:javascript
复制
<!-- fragment_my.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is a fragment"></TextView>
        
</LinearLayout>

在Activity中管理Fragment:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

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

        // 获取FragmentManager
        FragmentManager fragmentManager = getSupportFragmentManager();

        // 开始Fragment事务
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        // 创建并添加Fragment到指定的View
        MyFragment fragment = new MyFragment();
        fragmentTransaction.add(R.id.fragment_container, fragment);

        // 提交事务
        fragmentTransaction.commit();
    }
}

在Activity布局文件中添加占位符View:

代码语言:javascript
复制
<!-- activity_main.xml -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Fragment的容器View -->
    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

通过上述步骤,我们创建了一个MyFragment类作为Fragment,并在其中填充了布局文件fragment_my.xml。然后在MainActivity中,使用FragmentManager进行Fragment事务管理,在指定的View中添加了这个Fragment。通过这个案例,我们可以在Activity中动态加载和显示Fragment的布局和内容。

五 总结

  1. Fragment是Activity的一部分:
    • Fragment可以看作是Activity内部的模块或子页面,与Activity有生命周期和交互行为。
    • 一个Activity可以包含多个Fragment,并且可以在运行时动态地添加、替换、移除Fragment。
  2. 布局和视图:
    • 每个Fragment可以拥有自己的布局文件,通过onCreateView()方法返回填充的View对象。
    • 在Fragment中可以像处理Activity的界面一样操作和管理UI元素,例如设置监听器、修改内容等。
  3. 生命周期:
    • Fragment具有自己的生命周期,包括onCreate()、onCreateView()、onStart()、onResume()、onPause()、onStop()、onDestroyView()、onDestroy() 等方法。
    • Fragment的生命周期受到所属Activity的生命周期影响,它们之间存在关联。
  4. Fragment的通信:
    • Fragment可以通过在Activity中定义接口,在Activity和其他Fragment之间进行通信。
    • 一个Fragment可以通过getActivity()方法获取所属的Activity,从而与Activity进行交互。
  5. Fragment回退栈:
    • 可以将Fragment添加到回退栈中,并通过后退按钮(物理或虚拟)或代码控制来恢复前一个Fragment状态。
    • 使用回退栈可以实现Fragment之间的导航和切换。
  6. 动态管理:
    • 可以在运行时动态添加、替换、移除Fragment,从而实现灵活的界面交互。
    • FragmentTransaction用于管理Fragment的动作,并通过FragmentManager执行事务操作。
  7. 适配不同屏幕尺寸:
    • Fragment可以帮助应对屏幕旋转、多窗口模式等配置变化,保持数据和界面的一致性。
    • 使用Fragment可以更好地支持平板电脑和大屏设备的布局适配。

使用Fragment可以更好地组织代码、提高代码复用性,并实现灵活多样的用户界面。它在Android开发中广泛应用于构建复杂而功能丰富的应用程序。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一 Fragment基本介绍
  • 二 Fragment使用方法
  • 三 Fragment常见属性及方法
  • 四 Fragment简单案例
  • 五 总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档