创建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中,下面的章节将会讲到。
作者:kissazi2
出处:http://www.cnblogs.com/kissazi2/
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!