Fragment是Android honeycomb 3.0新增的概念,Fragment名为碎片不过却和Activity十分相似,下面介绍下Android Fragment的作用和用法。Fragment用来描述一些行为或一部分用户界面在一个Activity中,你可以合并多个fragment在一个单独的activity中建立多个UI面板,同时重用fragment在多个activity中.你可以认为fragment作为一个activity中的一节模块 ,fragment有自己的生命周期,接收自己的输入事件,你可以添加或移除从运行中的activity.
一个fragment必须总是嵌入在一个activity中,同时fragment的生命周期受activity而影响,举个例子吧,当activity暂停,那么所有在这个activity的fragments将被destroy释放。然而当一个activity在运行比如resume时,你可以单独的操控每个fragment,比如添加或删除。
Fragment作为Android 3.0的新特性,有些功能还是比较强大的,比如 合并两个Activity,如图
我们可以看到两个Activity通过两个Fragment合并到一个Activity的布局方式,对于平板等大屏幕设备来说有着不错的展示面板。不过因为Fragment和Activity的生命周期都比较复杂,我们分别对比下:
创建一个fragment你必须创建一个Fragment的子类或存在的子类,比如类似下面的代码
public static class Android123Fragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.android123_fragment, container, false);
}
}
Fragment类的一些代码看起来有些像Activity为了让大家了解清楚,给大家整理下Fragment的生命周期如上图所示,部分类似Activity的,我们详细解释
onCreate()
当fragment创建时被调用,你应该初始化一些实用的组件,比如在fragment暂停或停止时需要恢复的
onCreateView()
当系统调用fragment在首次绘制用户界面时,如果画一个UI在你的fragment你必须返回一个View当然了你可以返回null代表这个fragment没有UI.
那么如何添加一个Fragment到Activity中呢? Activity的布局可以这样写
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.android123.cwj.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment android:name="com.android123.cwj.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
最后提醒大家Fragment存在于Activity的ViewGroup中,按照继承关系大家就可以了解他的结构,由于Android 3.0的代码还没有开源,所以测试只能从Android honeycomb版本的模拟器上进行了。
Fragment的管理控制、性能优化以及和Activity的传输相关内容。
一、 管理Fragment
管理Fragment在你的Activity你需要使用一个名为FragmentManager的类,通过调用getFragmentManager()方法来实例化该管理类在你的Activity种。 FragmentManager 类一些主要的方法有通过findFragmentById()来获取一个Activity中有关Fragment布局。当然还有类似findFragmentByTag()方法,以及唐Fragment中出栈的popBackStack()同时可以注册addOnBackStackChangedListener()管理.具体的可以在android.app.FragmentManager类中了解
二、 优化Fragment事物处理
一个很好的特性在添加,删除,替换fragment在Activity时可以使用FragmentTransaction类来提高批量处理的效率,这点和SQLite的数据库更新原理类似。
FragmentManager fragmentManager = getFragmentManager(); //实例化fragmentmanager类
FragmentTransaction transaction = fragmentManager.beginTransaction(); //通过begintransaction方法获取一个事物处理实例。
在这期间可以使用 add(), remove(), 以及 replace(). 最终需要改变时执行 commit()即可,接下来我们写代码
transaction.replace(R.id.fragment_container,newFragment);
transaction.addToBackStack(null);
transaction.commit();
三、Fragment和Activity互相通讯
通常Fragment中我们放入平时标准的控件或自定义的控件,基本上和Activity一样,但是如何Fragment中的View布局也是放到Activity中的,有两种方法来实现
View listView = getActivity().findViewById(R.id.cwj); //通过getActivity方法可以获取一个Activity中的fragment,这里的cwj是一个fragment,在activity中的布局如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="com.android123.cwj.ArticleListFragment"
android:id="@+id/cwj"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment android:name="com.android123.cwj.ArticleReaderFragment"
android:id="@+id/smart"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
当然还有一种通过getFragmentManager方法获取实例,ExampleFragment fragment = (ExampleFragment)getFragmentManager().findFragmentById(R.id.cwj);
分享到:
相关推荐
根据Android第三版教材,做了一个QQ重新实现项目,先实现了QQ导航栏,联系人,后面又实现了聊天功能、聊天中的...碎片运用 3.QQ联系人界面 ListView+广播退出 4.QQ聊天界面 RecycleView 5.QQ“我的”界面 6.动态界面
碎片运用 3.QQ联系人界面 ListView+广播退出 4.QQ聊天界面 RecycleView 5.QQ“我的”界面 6.动态界面 1.安卓基础 1.1创建分析第一个项目【HelloWorld项目】 App里是主要的 Libs里存放第三方jar包 AndroidTest用来...
同时,碎片化学习也容易导致知识结构的碎片化,学习者难以正确灵活地运用知识。 知识点四:深度学习的定义和特点 深度学习是指学习者通过碎片化学习,获取大量知识,并将其整合、联系、提炼、转换,形成一个系统的...
另外,还可以运用灰度差分或者灰度相关性,通过计算像素值的差异或相关系数来确定两块图像是否匹配。此外,更复杂的方法如特征匹配(如SIFT或SURF特征)、图像配准算法(如基于梯度下降的配准)也可以用于确定碎片间...
在Android应用开发中,"碎片化侧边栏...通过合理地运用这些知识点,开发者可以构建出用户友好且功能强大的移动应用。在实际开发中,还需注意兼容性问题、性能优化以及遵循Material Design指南,以提供最佳的用户体验。
在Android应用开发中,"碎片"(Fragments)是一个关键的...理解并熟练运用碎片是构建高效、适应性强的Android应用的关键,尤其是在处理多屏幕适配和复杂UI设计时。通过实践和学习,你可以更好地掌握这一强大的工具。
在Android应用开发中,"碎片"(Fragments)是一种重要的组件,它允许开发者在单一活动中展示多个视图或界面。...通过实践和不断探索,你将能够更好地运用这一强大的工具来构建复杂且功能丰富的Android应用。
在Android应用开发中,碎片(Fragment)是一种可重用的UI组件,它可以嵌入...通过灵活运用各种通信机制,可以使应用的界面更加丰富和动态,提高用户体验。不断实践和研究,你将能够游刃有余地处理复杂的碎片交互问题。
在Android应用开发中,"碎片"(Fragment)是Android SDK中的一个重要组件,它允许开发者在同一个活动中展示多个可交互的UI部分。...在实际项目中,要根据具体需求灵活运用各种碎片相关的技巧和最佳实践。
Chop Slider 的工作原理主要是通过JavaScript的定时器(setTimeout或requestAnimationFrame)来控制图片切换的节奏,同时运用CSS3的transform属性来实现碎片的旋转和平移。这些碎片在切换过程中进行独立的动画处理,...
在图像处理领域,图像拼接是一项常见的任务,它涉及到图像的预处理、特征匹配、...这些技术的综合运用使得我们可以将看似无关联的图像碎片恢复成原有的完整图像,对于图像修复、全景图像创建等领域有着广泛的应用价值。
数据库文件在长期使用过程中,由于频繁的写入、删除操作,可能会出现数据碎片。这些碎片不仅会影响数据库的读写效率,严重时甚至可能...通过合理运用,用户可以有效地管理和优化自己的数据库,提升系统的稳定性和效率。
总的来说,理解和熟练运用Android的Fragment布局以及城市列表的实现,对于开发出高质量的安卓应用至关重要。这涉及到UI设计、数据管理、网络通信等多个方面,需要开发者具备扎实的基础知识和实践经验。
【基于threejs的3D爆炸碎片轮播图特效】是一个运用了HTML5库技术,特别是Three.js库,来实现一种创新且引人注目的视觉效果。Three.js是JavaScript的一个库,专为在Web浏览器中创建和展示三维图形而设计。这个特效...
本项目将XUtils与碎片相结合,提供了一个清晰的代码结构示例,帮助初学者更好地理解和运用这两个关键概念。 首先,XUtils的使用主要包括以下几个方面: 1. **依赖注入**:XUtils提供了注解的方式,使得开发者可以...
在问卷统计分析部分,研究运用了交叉性和差异性分析方法。交叉性分析显示,不同年级和专业的学生在时间管理问题上的原因和需求有所不同。例如,大一学生更关注时间分散,而高年级学生则更强调自我控制力的缺失。专业...
HTML5 Canvas是Web开发中的一个强大工具,它允许开发者在网页上直接绘制图形,从而创建出...这个“html5 canvas彩色碎片组合球形旋转动画特效”是一个很好的实践案例,帮助我们理解和运用Canvas API,提升Web开发技能。
在Android应用开发中,"碎片"(Fragment)是Android 3.0版本引入的一个重要组件,它是Activity的一个模块化部分,可以独立存在并被插入到Activity的...通过深入学习和实践,开发者能够更好地理解和运用这一强大的工具。
标题"Fragment碎片"指的是在Android应用中使用Fragment类来创建和管理用户界面组件。通过Fragment,开发者可以在不重新启动Activity的情况下,实现界面的动态切换和更新,提高用户体验。 描述"点击按钮切换不同的...
磁盘碎片整理程序是计算机维护中的一...这些功能的综合运用,使得用户能够在维护系统性能的同时,更好地管理和定制自己的计算环境。然而,由于涉及系统的敏感部分,操作时需谨慎,避免误操作导致系统不稳定或数据丢失。