【android开发-14】android中fragment用法详细介绍

1,fragment是什么?
Fragment是Android中的一种组件,它在Android 3.0(API级别11)及以后的版本中引入。Fragment可以用来在Activity中添加一个或多个具有自己的用户界面的片段。它们可以与Activity进行交互,并且可以在运行时动态添加或删除。

Fragment具有自己的生命周期,可以接收属于它自己的输入事件,并且可以在Activity运行期间独立地操作每一个Fragment。例如,可以在一个Activity中重用多个Fragment,也可以在一个Fragment中使用多个Fragment。

Fragment必须被嵌入到一个Activity中,并且它们的生命周期直接受其宿主Activity的生命周期的影响。当一个Activity正在运行时,可以独立地操作每一个Fragment,例如添加或删除它们。

总的来说,Fragment提供了一种在Activity中添加具有自己用户界面的片段的机制,使得应用程序可以更好地适应不同的屏幕尺寸和设备类型,并且提供了更灵活的用户界面设计选项。

2,fragment的状态和生命周期
在Android中,Fragment具有自己的状态和生命周期,与Activity的状态和生命周期类似,但也有一些区别。

Fragment的状态主要包括以下几种:

1,活动状态(Active):当Fragment被宿主Activity所需要并且被添加到Activity中时,处于活动状态。此时,Fragment会获得焦点,并可以与用户进行交互。

2,非活动状态(Inactive):当Fragment被添加到Activity中,但宿主Activity处于暂停状态时,Fragment会处于非活动状态。此时,Fragment不会获得焦点,并且不会与用户进行交互。

3,已暂停状态(Paused):当宿主Activity处于暂停状态时,所有处于活动状态的Fragment都会进入已暂停状态。此时,Fragment不会获得焦点,但仍然可以执行某些后台任务。

4,已销毁状态(Destroyed):当Fragment从Activity中移除并且被销毁时,会进入已销毁状态。此时,Fragment的所有实例变量都将变为null,并且不能再被使用。

Fragment的生命周期主要包括以下几种:

1,onAttach():当Fragment被附加到Activity时调用。
2,onCreate():在Fragment创建后立即调用。在此方法中可以进行一些初始化操作。
3,onCreateView():在Fragment创建其布局后调用。在此方法中需要返回Fragment的布局视图。
4,onViewCreated():在Fragment创建其布局后立即调用。在此方法中可以对视图进行进一步的初始化操作。
5,onActivityCreated():在Activity的onCreate()方法完成后立即调用。在此方法中可以进行一些依赖于Activity的操作。
6,onStart():在Fragment将要出现在屏幕上时调用。
7,onResume():在Fragment准备好与用户交互时调用。
8,onPause():在Fragment将要离开前台并暂停时调用。
9,onStop():在Fragment将要从屏幕上消失时调用。
10,onDestroyView():在销毁Fragment的视图和相关资源时调用。
11,onDestroy():在销毁Fragment实例时调用。在此方法中可以进行一些清理操作。
在这里插入图片描述
3,fragment的简单参考用例
在Android中,Fragment的使用可以帮助我们实现更加丰富和动态的用户界面设计。以下是一个简单的例子,展示了如何在代码中使用Fragment。

首先,我们需要创建一个新的Fragment类。在这个例子中,我们将创建一个简单的Fragment,它包含一个TextView,用于显示一段文本。

import android.os.Bundle;  
import android.view.LayoutInflater;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.TextView;  import androidx.annotation.NonNull;  
import androidx.annotation.Nullable;  
import androidx.fragment.app.Fragment;  public class MyFragment extends Fragment {  private static final String ARG_TEXT = "text";  public MyFragment() {  // Required empty public constructor  }  @Override  public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  }  @Override  public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) {  // Inflate the layout for this fragment  return inflater.inflate(R.layout.fragment_my, container, false);  }  
}

然后,我们需要在布局文件(例如fragment_my.xml)中定义这个Fragment的视图。在这个例子中,我们定义了一个TextView,用于显示一段文本。

<TextView xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/textView"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:text="Hello, I'm Fragment!" />

现在,我们可以在Activity的代码中使用这个Fragment。在这个例子中,我们将在一个按钮的点击事件中创建一个新的Fragment实例,并将其添加到Activity中。

import android.os.Bundle;  
import android.view.View;  
import android.widget.Button;  
import androidx.appcompat.app.AppCompatActivity;  
import androidx.fragment.app.FragmentActivity;  
import androidx.fragment.app.FragmentTransaction;  public class MainActivity extends AppCompatActivity {  private Button mButton;  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  mButton = findViewById(R.id.button);  mButton.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  FragmentTransaction ft = getSupportFragmentManager().beginTransaction();  MyFragment myFragment = new MyFragment(); // 创建新的Fragment实例。  ft.add(myFragment, null); // 将Fragment添加到Activity中。注意,第一个参数是容器的id(在这个例子中,我们没有定义一个特定的容器),第二个参数是Fragment的名字(在这个例子中,我们没有指定一个名字)。如果你想在之后引用这个Fragment,你可能需要指定一个名字。  ft.commit(); // 提交事务。这是必须的,否则Fragment不会被添加到Activity中。你可以使用ft.commitAllowingStateLoss()来提交事务,即使在Activity被杀死后也允许状态丢失。这在一些情况下是有用的,例如在Activity被系统杀死后仍然显示通知。但是请注意,这可能会导致数据丢失。因此,在你提交事务之前,确保你已经保存了所有必要的数据。

注意:
1,创建待添加的fragment实例
2,获取fragmentManager,在活动中直接调用getSupportFragmentManager方法得到。
3,开启一个事务,通过调用beginTransaction方法开启。
4,提交事务,通过commit方法来完成。

4,fragment和activity通讯的方式
在Android中,Activity和Fragment之间的通信可以通过以下几种方式实现:

1,使用回调(Callback):你可以在Activity中创建一个接口,然后将该接口的实现传递给Fragment。这样,Fragment就可以调用该接口的方法来与Activity进行通信。
这是一个使用回调的简单例子:

首先,定义一个回调接口:

public interface MyCallback {  void onButtonClicked();  
}

然后,在Activity中实现这个接口:

public class MyActivity extends AppCompatActivity implements MyCallback {  // ...  @Override  public void onButtonClicked() {  // 这里处理按钮点击事件  }  
}

在Fragment中,你可以通过onAttach方法获取Activity的实例,然后调用该实例的方法:

public class MyFragment extends Fragment {  private MyCallback mCallback;  @Override  public void onAttach(Context context) {  super.onAttach(context);  try {  mCallback = (MyCallback) context;  } catch (ClassCastException e) {  throw new ClassCastException(getActivity().toString() + " must implement MyCallback");  }  }  @Override  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {  View view = inflater.inflate(R.layout.fragment_my, container, false);  Button button = view.findViewById(R.id.button);  button.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  mCallback.onButtonClicked(); // 调用回调方法通知Activity按钮被点击了  }  });  return view;  }  
}

2,使用setArguments和getArgument:你可以在创建Fragment时,通过setArguments方法传递参数,然后在Fragment加载时,通过getArguments方法获取这些参数。但是这种方式主要用于传递数据,而不是用于通信。
3,使用findFragmentById和findFragmentByTag:你可以在Activity中使用findFragmentById和findFragmentByTag方法获取Fragment的实例,然后直接调用该实例的方法。但是这种方式需要在Activity的布局文件中为Fragment定义一个id或者tag。这种方式主要用于已经存在的Fragment之间的通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/247491.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Batch Normalization

1.是什么&#xff1f; 批量归一化&#xff08;Batch Normalization&#xff09;&#xff0c;由Google于2015年提出&#xff0c;是近年来深度学习&#xff08;DL&#xff09;领域最重要的进步之一。该方法依靠两次连续的线性变换&#xff0c;希望转化后的数值满足一定的特性&am…

STM32串口通信初探:使用HAL库实现基本功能

在本文中&#xff0c;我们将探索如何使用STM32的HAL库来实现串口通信的基本功能。串口通信是一种常见的外设通信方式&#xff0c;用于在微控制器和其他外部设备之间进行数据传输。在STM32系列微控制器中&#xff0c;HAL库提供了简单且灵活的方法来实现串口通信。我们将重点讨论…

python读取所有sheet内容到另一个文件中

实现效果&#xff1a; 将原excel中的步骤、预期效果列按回车拆成多行数据&#xff0c;其余字段值填充其他数据 实现结果&#xff1a; # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your code. # Press Double Shift to search everyw…

【鸿蒙应用开发】开发环境搭建及IDE安装使用

1.下载安装包 安装包下载地址&#xff1a; 点击跳转下载页面 可以根据自己的操作系统选择对应版本下载。 本文以Windows安装为例&#xff0c;Mac安装方式相同 2. 安装 下载好后&#xff0c;打开安装包&#xff0c;进入安装界面&#xff1a; 点击Next&#xff0c;进入安…

LInux组管理及拓展

目录 一、Linux组管理 &#xff08;一&#xff09;、组的概述 1.概述 2.作用 &#xff08;二&#xff09;、组操作 1.创建 2.修改 3.删除 4.添加用户 二、用户信息查看 &#xff08;一&#xff09;、id &#xff08;二&#xff09;、finger &#xff08;三&#x…

【专题】【中值定理-还原大法】

1&#xff09;构造辅助函数 2&#xff09;罗尔定理&#xff1a; 闭区间连续&#xff0c;开区间可导 F&#xff08;a&#xff09;F&#xff08;b&#xff09; 3&#xff09;F‘&#xff08;ξ&#xff09;0&#xff0c;原命题得证 极限保号性&#xff1a;

ISIS配置以及详解

作者简介&#xff1a;大家好&#xff0c;我是Asshebaby&#xff0c;热爱网工&#xff0c;有网络方面不懂的可以加我一起探讨 :1125069544 个人主页&#xff1a;Asshebaby博客 当前专栏&#xff1a; 网络HCIP内容 特色专栏&#xff1a; 常见的项目配置 本文内容&am…

【C进阶】C程序是怎么运作的呢?-- 程序环境和预处理(上)

前言&#xff1a; 由于c语言的程序编译链接的这块知识点不清楚&#xff0c;回来复习一遍&#xff0c;以便于好理解c知识&#xff0c;我会尽快更新下一篇文章。 目录 1.程序的翻译环境和执行环境 2.翻译环境&#xff08;编译链接&#xff09; 编译&#xff08;编译器&#xf…

C语言分支结构程序之if语句(1)

目录 if语句其一 奇数的判定 if语句其二 对奇数偶数的判断 if语句的结构图 专题 语法结构 结构图的阅读方法 结构图示例 相等运算符 关系运算符 嵌套的if语句 if语句其一 大家的一天都会怎么度过呢&#xff1f;我想应该不会是被设计好的程序那样循规蹈矩&#xff0c;我们…

webpack学习-1.起步

webpack学习-1.起步 1.基础设置2.配置文件的引入3.总结 1.基础设置 首先 webpack是干嘛的呢&#xff0c;用官网的一张图 Webpack 是一个现代的静态模块打包工具。它主要用于将前端应用程序中的各种资源&#xff08;例如 JavaScript、CSS、图片等&#xff09;打包成一个或多个…

【杂】解决关于mean(0)理解错误引发的程序bug

一、环境和解释器要一起配置好 invalid syntax 发生你在终端激活了一个环境&#xff0c;但 VSCode 依然使用之前的解释器的情况。 解释器设置影响了 VSCode 中运行 Python 脚本、调试、代码补全等功能的行为。VSCode 会根据你选择的解释器来执行这些操作。 二、关于mean&#x…

菜鸟学习日记(python)——运算符

我们进行运算时&#xff0c;需要两类数据&#xff0c;操作数和运算符&#xff0c;例如&#xff1a;ab就是一个运算&#xff0c;它的操作数是a和b&#xff0c;运算符是‘’ 在python中运算符包括以下几大类&#xff1a; 算数运算符比较&#xff08;关系&#xff09;运算符赋值…