【Android从零单排系列四十九】《Android中自定义Fragment的实现方法》

news/2024/11/15 0:39:49/

目录

前言

一  Fragment介绍

二  Fragment的缺点

三  自定义Fragment的步骤

四 自定义Fragment的demo


前言

小伙伴们,在前面的文章中,我们谈到了Android开发中的自定义view的基本概念及方法等,本文我们实际举例自定义一个Fragment。

一  Fragment介绍

Fragment是Android中一种用于构建灵活和可重用界面组件的基本单元。它可以被嵌入到Activity中,作为Activity的一部分进行管理和交互。

二  Fragment的缺点

  1. 复杂性:相较于普通的Activity,使用Fragment会增加一定的复杂性。需要在Activity中管理Fragment的生命周期、处理Fragment之间的通信等,增加了代码的复杂度和维护的难度。

  2. 生命周期管理困难:Fragment有自己独立的生命周期,与宿主Activity的生命周期紧密相关。在处理Fragment的生命周期时,需要小心处理生命周期回调,以避免潜在的内存泄漏和状态异常。

  3. 嵌套过深问题:由于Fragment支持嵌套使用,当多个Fragment嵌套使用时,可能会导致结构复杂、层次嵌套过深的情况。这可能增加布局的复杂性,并带来一些管理和交互上的困难。

  4. 版本兼容性问题:在低版本的Android平台上,Fragment的支持存在限制和不一致性。某些特性和方法可能只适用于较新的Android版本,这给开发者带来了一定程度的版本兼容性问题。

  5. 资源消耗:每个Fragment都会占用一定的系统资源,包括内存和CPU。当应用程序中使用多个Fragment或者频繁切换Fragment时,可能会增加系统资源的消耗,导致性能下降。

三  自定义Fragment的步骤

  1. 创建Fragment类:首先,在你的Android项目中创建一个继承自androidx.fragment.app.Fragment的Java类,作为你自定义的Fragment。

  2. 实现Fragment布局:在Fragment类中,使用onCreateView()方法来实现Fragment的布局。可以通过编写XML布局文件或者动态创建视图对象来定义Fragment的UI界面。

  3. 定义Fragment逻辑:根据需求,在Fragment类中添加必要的业务逻辑。例如,处理用户交互事件、与宿主Activity通信等。

  4. 处理生命周期:重写Fragment的生命周期方法,根据需要添加相关的逻辑。常见的生命周期方法包括onCreate(), onActivityCreated(), onStart(), onResume(), onPause(), onStop(), onDestroyView(),onDestroy()等。

  5. 设置Fragment参数(可选):如果需要给Fragment传递参数,可以通过构造方法或设置方法来传递参数。注意,在创建和配置Fragment实例之前,确保所需的参数已经准备好。

  6. 在Activity中使用Fragment:在宿主Activity的布局文件或者代码中,将你的自定义Fragment添加到指定的位置。你可以使用FragmentManager来管理Fragment,通过beginTransaction()方法开始一个事务,并使用add()replace()等方法来添加或替换Fragment。

  7. 处理Fragment之间的通信(可选):如果不同的Fragment之间需要进行通信,你可以通过接口回调、广播等方式实现。定义适当的接口和监听器,使得Fragment能够在需要时与其他组件进行交互。

  8. 执行事务:最后,在Activity中提交事务以显示和管理Fragment。使用commit()方法提交并执行事务。

四 自定义Fragment的demo

首先,创建一个名为CustomFragment的Java类,继承自androidx.fragment.app.Fragment

public class CustomFragment extends Fragment {public CustomFragment() {// Required empty public constructor}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView view = inflater.inflate(R.layout.fragment_custom, container, false);// Find and initialize views or handle UI logic herereturn view;}// Other lifecycle methods and custom logic can be added here}

接下来,在项目的res/layout目录下创建一个XML布局文件,例如fragment_custom.xml,用于定义Fragment的UI界面:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!-- Add your desired views here --></LinearLayout>

然后,在宿主Activity的布局文件或者代码中,将自定义的Fragment添加到指定位置。以下是在Activity中使用Fragment的示例代码:

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// Get the fragment managerFragmentManager fragmentManager = getSupportFragmentManager();// Begin the fragment transactionFragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();// Create an instance of CustomFragmentCustomFragment customFragment = new CustomFragment();// Add the fragment to the specified container in the activity layoutfragmentTransaction.add(R.id.fragment_container, customFragment);// Commit the transaction to display the fragmentfragmentTransaction.commit();}
}

在上述代码中,通过FragmentManager管理Fragment,使用beginTransaction()开始一个事务,使用add()方法将自定义的Fragment添加到指定的容器中(在activity的布局文件中定义了一个带有id为fragment_container的容器)。最后,使用commit()方法提交事务以显示和管理Fragment。


http://www.ppmy.cn/news/807505.html

相关文章

2k屏幕带来生产力提升,任务栏34图标

1080p分辨率下&#xff0c;win10任务栏放不下很多图标&#xff0c; 但升级到2K屏幕&#xff0c;2560*1440分辨率下&#xff0c;可以容纳34个图标。

显示屏相关知识

屏幕分辨率(screen resolution) FHD(Full High Definition&#xff0c;全高清&#xff0c;分辨率 1920 x 1080&#xff0c;俗称1080p) UHD(Ultra High Definition&#xff0c;超高清&#xff0c;分辨率达到3840 x 2160及以上的显示) QFHD(Quad Full High Definition&#xf…

笔记本设置 2K 显示屏 Intel HD Graphics 3000

收了一台 32英寸的显示器&#xff0c;接到笔记 本只有 1920x1080&#xff0c;心想没得救了&#xff0c;要换笔记本才能用了。 在网上找了一圈&#xff0c;找到一篇说 Intel HD Graphics 3000 可以支持到 2560x1440 的。[1] 在以下这个界面改了 N 次发现不行。 原来最后要把 HDM…

黑苹果hidp显示不清楚_macOS 2K 显示屏开启 HiDPI 解决字体小或模糊

charm 一、原理 强烈推荐阅读 有关retina和HiDPI那点事 ,文中解释相当清晰。而我们开启 HiDPI 的作用:牺牲整个屏幕可显示的信息量,换取更加细腻的显示效果。 例如:我的屏幕默认分辨率为 2560x1440,开启 HiDPI 后,仅显示 1920x1080 信息量,相当于之前 1 个像素内容用 1.…

【H5】Promise的用法

系列文章 C#底层库–记录日志帮助类 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/124187709 文章目录 系列文章前言一、技术介绍二、项目源码2.1 Promise的状态2.2 Promise的结果2.3 Promise的then方法参数2.4 Promise的then方法获取数据 三、效果…

国际金融互联报文规范SWIFT之银行识别代码BIC Code介绍

之前通过几篇文章介绍了现代化支付系统行号CNAPS Code、以及金融机构编码的组成&#xff0c;如下所示&#xff1a; 人民银行现代化支付系统CNAPS行号介绍 金融机构编码结构完整介绍 但前面这些编号主要用于国内银行间的支付结算报文传递。而在国际业务&#xff0c;涉及境外外…

iOS通用链接(UniversalLink)配置详细流程

一、Universal Links 配置过程 登录苹果账号后&#xff0c;点击创建的APP 的Bundle ID&#xff0c;跳转到APP 信息页面。记录下Team ID 和Bundle ID 备用。勾选上 功能列表上的 ”Associated Domains“选项。 配置苹果后台 创建一个text空文本文件&#xff0c;去掉文件后缀&a…