创建Fragment

简介:

你可以认为fragment是Activity中模块化的部分。Fragment有它自己的生命周期,接收它自己的输入事件,并且你可以在Activity运行的时候添加或移除它(有点像可以被重用在不同Activity的"子Activity")。这个教程主要叫你怎么使用Support Library来继承Fragment类,以便你的app可以兼容最低到Android 1.6的系统。

注意:如果你需要支持的API版本是11或更高,你就不必使用Support Library,你可以直接使用现有框架下的Fragment类。值得注意的是,这篇教程主要集中在怎么使用Support Library中的API。这些API使用特定的包签名,并且他们的名称跟直接包含这些API的平台下的名称稍有不同。

在你开始这篇教程前,你必须先设置你的Android 工程使用Support Library。如果你没有使用过Support Library,那么你需要跟着Support Library Setup文档设置你的工程使用v4 library。当然,你也可以包含action bar在你的Activity中,使用v7 appcompat library。v7 appcompat library 可以兼容Android 2.1(API level 7),而且它也有包含Fragment API。

 

我们的教程将下面的步骤进行讲解:

1、创建Fragment类

2、使用XML将Fragment添加到Activity中

我们打算做一个简单地做一个新闻客户端。这个客户端很简单,点击新闻标题,进而显示新闻内容。我们将用一个Fragment来显示显示标题,用一个Fragment来显示新闻内容。当点击新闻标题时,新闻标题Fragment会被用于显示新闻内容的Fragment所替换。在下面的教程中,你会了解到Fragment是如何创建的,以及如何用一个Fragment替换另一个。

创建Fragment类

为了创建Fragment,我们需要继承Fragment类。跟Activity一样,我们可以重写跟自定义的Fragment生命周期相关的方法。

跟Activity不同的是,Fragment在onCreateView()回调函数中定义自己的布局。实际上,我们只要在onCreateView()中定义Fragment布局,就可以使用Fragment了,这是唯一一个我们必须要实现的方法。举个例子,下面我们将简单地定义一个Fragment的布局(布局文件article_view.xml可以从文章下方的示例代码中找)。

复制代码
package com.bang.testfragment;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ArticleFragment extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        //在这里定义Fragment的布局
        return inflater.inflate(R.layout.article_view, container,false);
    }
}
复制代码

跟Activity一样,我们也可以重写跟生命周期有关的回调函数(如onPause),以便使Fragment符合我们的需要。更详细的信息可以惨遭Fragments开发指南.。

使用XML布局文件向Activity添加Fragment

因为fragment是可重用、模块化的UI控件,每一个Fragment类的实例都必须跟一个父FragmentActivity关联起来。你可以通过在你的activity的XML布局文件中定义每一个fragment实现他们之间的关联。

注:FragmentActivity是Support Library中提供的特殊的Activity,它主要用来兼容在API level11之前的系统中fragment的使用问题。如果你需要支持的最低系统版本是API level11或更高,那么你可以使用普通的 Activity.

下面的布局文件定义了在屏幕比较大的情况下,如何添加两个fragment到Activity上(在路径名中带有large的修饰符)

res/layout-large/news_articles.xml

复制代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <fragment android:name="com.example.android.fragments.HeadlinesFragment"
              android:id="@+id/headlines_fragment"
              android:layout_weight="1"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

    <fragment android:name="com.example.android.fragments.ArticleFragment"
              android:id="@+id/article_fragment"
              android:layout_weight="2"
              android:layout_width="0dp"
              android:layout_height="match_parent" />

</LinearLayout>
复制代码

建议:如果你想要了解更多如何兼容不同大小的设备的方法,可以看一下Supporting Different Screen Sizes.

复制代码
package com.bang.testfragment;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity  {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news_articles);
    }
}
复制代码

然后,我们需要将这个布局文件应用到我们的Activity中。

如果你用的是v7 appcompat library,你的Activity应该继承ActionBarActivity而不是FragmentActivity,因为ActionBarActivity是Fragment的子类。

注意:如果你通过XML布局文件添加fragment到Activity中的话,那么你就无法在运行时将fragment移除。如果你打算在用户操作的时候插入或移除fragment,你就必须在activity一开始启动的时候,将fragment添加到activity中,下面的章节将会讲到。

本文转自陈哈哈博客园博客,原文链接http://www.cnblogs.com/kissazi2/p/3440253.html如需转载请自行联系原作者                                                                                                                          kissazi2
相关文章
|
8月前
|
人工智能 安全 测试技术
我给 OpenClaw 杀了 47 次僵尸进程,终于想明白了一些事
本文深度剖析OpenClaw:既吐槽其Gateway单点故障、钉钉通道集成缺陷与稳定性痛点,也肯定其“个人AI助理”叙事成功;对比本地开源(OpenClaw)与云端沙箱(Manus)路径,反思Skill模式与传统工程化取舍,并指出AI能写代码,但架构、产品与安全仍需人来把关。
我给 OpenClaw 杀了 47 次僵尸进程,终于想明白了一些事
|
10月前
|
人工智能 JSON 算法
超越Prompt与RAG:为什么企业级AI客服必须走微调之路?
你好,我是maoku。本文直击企业AI落地痛点:为何Prompt+RAG之后,仍需模型微调?以电商客服为例,深度解析微调的不可替代性——填补通用模型与垂直业务间的“专业鸿沟”,通过高质量数据构建、情绪共情训练与微调+RAG协同架构,打造专业、稳定、低成本的业务AI。(239字)
|
前端开发 数据库
Promise.allSettled() 和 Promise.all() 有什么区别?
Promise.allSettled() 和 Promise.all() 有什么区别?
804 173
|
缓存 负载均衡 网络协议
面试官:什么是连接池?
啊,这....小马曾经也很好奇这是个什么玩意,后面写GO的时候因为要自己实现DB层和redis层,才对它有了更进一步深入的了解。但要是正儿八经地说呢,也不知道该怎么描述。还是借助网络上各路大神的文章来抛玉引我这个砖吧。
736 0
面试官:什么是连接池?
|
JavaScript 编译器 开发工具
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
1039 2
【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
机器学习/深度学习 存储 算法
【强化学习】常用算法之一 “Q-learning”
Q-learning算法是一种基于强化学习的无模型学习方法,通过学习到目标系统的Q值函数来解决智能体在给定环境下的最优决策策略问题。Q-learning算法是基于后验策略方法,即学习出目标系统的价值函数Q之后,通过使用某种策略来最大化该价值函数,称之为后验策略。Q-learning算法是偏差-方差权衡的算法,在偏差较高的情况下可以在基于模型的强化学习中找到一个接近最优策略的解决方案。同时它也具有较高的收敛速度和广泛的适用性,因为其只需要存储一个值函数,不需要存储模型。
1748 0
【强化学习】常用算法之一 “Q-learning”
|
存储 编解码 人工智能
自媒体影视后期数字助理--视频调色中间件设计
阿里云提供的线上AI能力在处理视觉信息方面已经有较为成熟和通用的产品,对于开始兴建媒体资源管理平台的自媒体来说,采用阿里云的AI能力、函数计算以及OSS等产品进行平台搭建可以快速实现建设与能力扩充。本文为调色中间件的开发思路、技术架构设计和开发实战中参数的设置介绍,对一些数字影像的基础概念和阿里云人工智能视觉生产的API细节进行了分析。
1651 122
自媒体影视后期数字助理--视频调色中间件设计
|
算法 前端开发 数据可视化
【博士每天一篇文献-综述】Brain network communication_ concepts, models and applications
本文综述了脑网络通信的概念、模型和应用,将脑网络通信模型分为扩散过程、参数模型和路由协议三大类,并探讨了这些模型在理解大脑功能、健康和疾病方面的应用,同时提出了未来研究方向和使用Brain Connectivity Toolbox等工具箱进行实际研究的指导。
462 1
【博士每天一篇文献-综述】Brain network communication_ concepts, models and applications
|
数据采集 编解码 数据可视化
空间单细胞|10x Visium数据分析、可视化与整合(1)
空间单细胞|10x Visium数据分析、可视化与整合(1)
|
开发工具 iOS开发 git
ios 开发环境常见问题合集
ios 开发环境常见问题合集
1072 1

热门文章

最新文章