一个片段是一个应用程序的用户界面或行为,可以放置在一个活动让更模块化的活动设计。 它不会是错误的,如果我们说,一个片断是一种 sub-acitivity 。 以下是关于片段要点:

  • 一个片段都有它自己的布局和自身行为有自己的生命周期回调。

  • 您可以添加或删除片段的活动而活动正在运行。

  • 您可以组合多个片段,一个活动来构建一个多窗格UI。

  • 一个片段可以用在多个活动。

  • 片段的生命周期密切相关,这意味着当宿主的生命周期活动活动暂停,所有可用的碎片在acivity也将停止。

  • 一个片段可以实现一种行为,没有用户界面组件。

  • 碎片被添加到Android API在蜂窝版本的Android API版本11。

您创建片段通过扩展 片段 类,你可以将一个片段插入到你的活动布局,宣布活动的布局文件的片段,作为一个<片段> 元素。

片段介绍之前,我们有一个限制,因为我们可以在屏幕上只显示单个活动在一个给定的时间点。 所以我们不能把设备屏幕分别控制不同的部分。 但通过引入片段我们得到了更大的灵活性和删除单个活动的限制在屏幕上。 现在,我们可以有一个活动,但每个活动可以包括多个片段将有自己的布局、事件和完整的生命周期。

下面是一个典型的例子如何两个UI模块定义的片段可以组合成一个活动为平板电脑设计,但手机设计的分离。

应用程序可以在活动中嵌入两个片段,当平板上运行。 然而handset-sized屏幕上,没有足够的空间碎片,所以活动只包括片段的文章列表,用户选择一篇文章时,它开始活动,其中包括第二个片段阅读这篇文章。

片段的生命周期

Android片段有自己的生命周期非常类似于一个Android的活动。 本节简介其生命周期的不同阶段。

第一阶段: 当创建一个片段,它通过以下国家:

  • onAttach()

  • onCreate()

  • onCreateView()

  • onActivityCreated()

第二阶段: 当片段变得可见,通过这些状态:

  • 要()

  • onResume()

第三阶段: 当碎片进入后台模式时,它会通过这些状态:

  • onPaused()

  • onStop()

第四阶段: 当片段被摧毁时,它会经历以下状态:

  • onPaused()

  • onStop()

  • onDestroyView()

  • onDestroy()

  • onDetach()

如何使用片段吗?

这涉及到一些简单的步骤来创建片段。

  • 首先决定你想要有多少碎片在一个活动中使用。 的例子让我们我们想要使用两个片段来处理设备的风景和肖像模式。

  • 接下来基于数量的片段,创建类将扩展 片段 类。 上面的片段类有提到的回调函数。 您可以覆盖任何函数基于您的需求。

  • 对应于每个片段,您需要在XML文件中创建布局文件。 这些文件将定义的布局碎片。

  • 最后修改活动文件定义的实际逻辑取代碎片基于您的需求。

这是重要的方法列表,您可以覆盖你的片段类:

  • onCreate() 这个系统调用时创建片段。 你应该初始化基本组件的片段,片段时你想保留暂停或停止,然后重新开始。

  • onCreateView() 系统调用这个回调的时候的片段为第一次画它的用户界面。 画一个UI的片段,你必须返回 视图 组件的根源从这个方法你片段的布局。 你可以返回null如果片段不提供用户界面。

  • onPause() 系统调用此方法作为第一个迹象表明用户离开片段。 这通常是你应该提交的任何更改,应保存在当前用户会话。

例子

这个例子将解释如何创建您自己的 片段 。 在这里,我们将创建两个片段,其中一个将在横向模式时使用设备和另一个片段将使用在肖像模式。 让我们按照下面的步骤类似于我们在创建 Hello World示例 :

一步 描述
1 您将使用Eclipse IDE创建一个Android应用程序和名称 MyFragments 在一个包com.example.myfragments ,空白的活动。
2 修改主要活动文件 MainActivity.java 如下所示的代码。 在这里,我们将检查设备的方向,因此我们将切换不同的片段。
3 创建两个java文件 PM_Fragment.java 和 LM_Fragement.java 下包 com.example.myfragments定义你的碎片和相关方法。
4 创建布局文件 res /布局/ lm_fragment.xml 和 res /布局/ pm_fragment.xml 和定义你布局的碎片。<
5 修改的detault内容 res /布局/ activity_main.xml 文件包括碎片。
6 定义需要的常量 res /价值/ strings.xml 文件
7 运行应用程序推出Android模拟器并验证在态变化的结果。

以下是修改后的主要活动文件的内容 src / com.example.mycontentprovider / MainActivity.java :

package com.example.myfragments;import android.os.Bundle;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.res.Configuration;
import android.view.WindowManager;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Configuration config = getResources().getConfiguration();FragmentManager fragmentManager = getFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();/*** Check the device orientation and act accordingly*/if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {/*** Landscape mode of the device*/LM_Fragment ls_fragment = new LM_Fragment();fragmentTransaction.replace(android.R.id.content, ls_fragment);}else{/*** Portrait mode of the device*/PM_Fragment pm_fragment = new PM_Fragment();fragmentTransaction.replace(android.R.id.content, pm_fragment);}fragmentTransaction.commit();}}

创建两个片段文件 LM_Fragement.java 和 PM_Fragment.java 下 com.example.mycontentprovider 包中。

下面的内容 LM_Fragement.java 文件:

package com.example.myfragments;import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;public class LM_Fragment extends Fragment{@Overridepublic View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {/*** Inflate the layout for this fragment*/return inflater.inflate(R.layout.lm_fragment, container, false);}
}

下面的内容 PM_Fragement.java 文件:

package com.example.myfragments;import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;public class PM_Fragment extends Fragment{@Overridepublic View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {/*** Inflate the layout for this fragment*/return inflater.inflate(R.layout.pm_fragment, container, false);}
}

创建两个布局文件 lm_fragement.xml 和 pm_fragment.xml 下 res /布局 目录中。

下面的内容 lm_fragement.xml 文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#7bae16"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/landscape_message"android:textColor="#000000"android:textSize="20px" /><!-- More GUI components go here  --></LinearLayout>

下面的内容 pm_fragment.xml 文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#666666"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/portrait_message"android:textColor="#000000"android:textSize="20px" /><!-- More GUI components go here  --></LinearLayout>

以下的内容 res /布局/ activity_main.xml 文件,包括你的片段:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal"><fragmentandroid:name="com.example.fragments"android:id="@+id/lm_fragment"android:layout_weight="1"android:layout_width="0dp"android:layout_height="match_parent" /><fragmentandroid:name="com.example.fragments"android:id="@+id/pm_fragment"android:layout_weight="2"android:layout_width="0dp"android:layout_height="match_parent" /></LinearLayout>

确保你有以下的内容 res /价值/ strings.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<resources><string name="app_name">MyFragments</string><string name="action_settings">Settings</string><string name="hello_world">Hello world!</string><string name="landscape_message">This is Landscape mode fragment</string><string name="portrait_message">This is Portrait mode fragment</string></resources>

让我们尝试运行修改 MyFragments 我们刚刚创建的应用程序。 我假设您已经创建了您 AVD中 在做环境设置。 从Eclipse运行应用程序,打开一个项目的活动文件并单击run 从工具栏图标。 AVD的Eclipse安装应用程序和启动它,如果一切都好与你的设置和应用程序,它将显示模拟器窗口,点击菜单按钮,您将看到下面的窗口。 是耐心,因为它可能需要基于某个时候你的电脑速度:

改变屏幕模拟器的模式,让我们做以下几点:

  • fn +控制+到F11 在Mac改变横向/纵向,反之亦然。

  • ctrl +到 在Windows上。

  • ctrl +到 在Linux上。

一旦你改变了模式中,你可以看到风景的GUI,您已经实现模式如下:

这样你可以使用相同的活动但是不同的gui通过不同的碎片。您可以使用不同类型的GUI组件根据您的需求为不同的GUI。

Android Fragments相关推荐

  1. android Fragments详解

    android Fragments详解一:概述 android Fragments详解二:创建Fragment 转载于:https://my.oschina.net/liangzhenghui/blo ...

  2. Android Fragments新功能

    在刚刚过去Android Dev Summit 2019中,提到很多项目,如依旧大力推广的Kotlin,还有Jetpack Compose,CameraX,Room等新功能.其中也提到了android ...

  3. Android Fragments 详细使用详细介绍

    其它推荐: [原创]android版本飞鸽传书源码(附图) Android植物大战僵尸对战版源码 实用源码--Android屏幕锁源码 Fragments 诞生初衷 自从Android 3.0中引入f ...

  4. Android Fragments 详细使用

    Fragments 诞生初衷 自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片.片段.其上的是为了解决不同屏幕分辩率的动态和灵活UI设计.大屏幕如平板小屏幕如手 ...

  5. android Fragments (Android官方文档中文版)

    概述 Fragment 表现 Activity 中用UI的一个行为或者一部分. 可以组合多个fragment放在一个单独的activity中来创建一个多界面区域的UI,并可以在多个activity里重 ...

  6. 【fragment】Android Fragments 详细使用

    http://terryblog.blog.51cto.com/1764499/793310 Fragments 诞生初衷 自从Android 3.0中引入fragments 的概念,根据词海的翻译可 ...

  7. (转)android Fragments详解三:实现Fragment的界面

    为fragment添加用户界面 fragment一般作为activity的用户界面的一部分,把它自己的layout嵌入到activity的layout中.    一个 要为fragment提供layo ...

  8. android Fragments详解一:概述

    Fragment是activity的界面中的一部分或一种行为.你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个Fragment.你 ...

  9. android Fragments详解六:处理fragement的生命周期

    把条目添加到动作栏 你的fragment们可以向activity的菜单(按Manu键时出现的东西)添加项,同时也可向动作栏(界面中顶部的那个区域)添加条目,这都需通过实现方法onCreateOptio ...

最新文章

  1. 设计模式: 自己手动实现一个观察者设计模式
  2. 利用python卷积神经网络手写数字识别_Keras深度学习:卷积神经网络手写数字识别...
  3. 面对一夜狼人杀特殊的游戏机制,取得胜利很难吗?还可以
  4. P5496-[模板]回文自动机【PAM】
  5. Spring Data JPA 从入门到精通~基本注解
  6. java final定义_Java中final关键字的用法
  7. MTK 驱动开发(48)---ARM 看门狗机制
  8. PHP调微信小程序接口生成access_token
  9. 合并报表excel自动模板_自动合并
  10. python读取svg转emf_玩玩矢量图标,SVG转换EMF
  11. bzoj4816: [Sdoi2017]数字表格
  12. 路由器自动连接服务器无响应,路由器WAN口设置已断开(服务器无响应)怎么办?...
  13. MySQL事务 - 自增ID的回滚以及Auto Increment在InnoDB的实现
  14. Spring Boot (Filter)过滤器的实现以及使用场景
  15. Vero VISI 2021.0.2109
  16. 人生, 不求活得完美,但求活得实在
  17. js 延迟几秒执行ifarme_延时加载JavaScript代码提高速度_javascript技巧 -
  18. MATLAB的应用 Applications of MATLAB in engineering
  19. win11可以安装windows server2016吗
  20. Ubuntu 18.04上使用snort3搭建NIDS(二)| 配置篇

热门文章

  1. CentOS8中安装SQL Server 2019 for Docker和sqlcmd工具
  2. python records_python – Numpy到TFrecords:有没有更简单的方法来处理来自tfrecords的批量输入?...
  3. html怎么让div一直旋转,css3实现元素不停旋转
  4. windows本地安装部署 Easy Mock
  5. 将10进制整数转为64进制形式的PHP实现
  6. 世界首富突然离婚,被曝因婚内出轨
  7. Javascript中最常用的一些经典技巧
  8. 力扣让我心碎的第十一天
  9. 得金融大数据者得天下,下一个一百亿市场在这里
  10. 机房收费系统——添加删除用户窗体