Android Fragment 与 Fragment管理器
来源:互联网 发布:平价时尚欧美女装知乎 编辑:程序博客网 时间:2024/06/10 18:54
Android Fragment 与 Fragment管理器
首先谈谈Fragement的需求
过去开发人员认为界面之间的跳转只需要使用多个activity组成就行了;
例如下图中,在Activity-A管理的界面中单击按钮后,Activity-A响应事件并启动Activity-B;而用户在单击后退键会销毁Activity-B 并返回Activity-A界面,如此反复。
但是,如果需要更加复杂的用户界面跳转呢?例如平板设备以及大尺寸手机的屏幕足够大,因此可以同时容纳多个界面(如平板的设置菜单等),又或者用户通过手机查看记录时,希望通过左右滑动来查看上一条/吓一跳记录等情况。
由于Android开发UI设计的灵活性需求,UI设计往往需要适应用户或设备的需求,activity界面在必要时可以在运行时组装或重新组装。但是Activity本身是不具有这样的灵活性,activity视图可以在运行时切换,当控制视图的代码必须在activity中实现;因此activity还是与特定的用户屏幕绑定在一起。
Fragement的引入
首先需要声明一点:Fragement本身并不是视图对象,而是一种控制器对象,activity可委派它处理一些任务。这些任务通常是管理用户界面。
管理用户界面的fragement又称为UI Fragement,它自己也可以产生于布局文件的视图。
一个简单的Fragement例子
在新建一个空项目后,首先我们要做的就是添加依赖关系:
在File->Project Structure…菜单中打开项目结构对话框,选择如下图
点击右上角+号按钮,选择Library dependency界面添加新的依赖项,如下图显示,选择support-v4库
新建一个Crime类
文件Crime.javaimport java.util.UUID;//构造函数public class Crime { private UUID mID; private String mTitle; public Crime(){ mID=UUID.randomUUID(); } public UUID getmID() { return mID; } public String getmTitle() { return mTitle; } public void setmTitle(String mTitle) { this.mTitle = mTitle; }}
创建 UI fragement
文件frame_layout.xml<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragement_container" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/container_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/title_hint"/></FrameLayout>
在初始化的Activity类中进行修改
文件CrimeActivity.javapackage com.example.administrator.criminalintent;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.os.Bundle;public class CrimeActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.frame_layout); //添加UI fragment 到ragmentManager // 获取FragmentManager FragmentManager fm = getSupportFragmentManager(); /* 如果在上方添加代码出现了错误,请检查导入语句,看看是否导入的是 import android.support.v4.app.*; */ //fragment事务 //首先,依据R.id.fragement_container向FragmentManager请求并获取fragment //如果希望获取的fragment已经存在于队列中,则直接返回它。 /* 关于为什么队列中可能存在希望获取的fragment的原因,主要是因为设备在回收内存时, 销毁Android会销毁CrimeActivity;之后重建时,会调用CrimeActivity.onCreate(...)方法。 activity被销毁时,其FragmentManager会保留下来。这样在重建activity时, 新的FragmentManager会首先视图获取保存的队列,然后再重建fragement队列,进而恢复到原来的状态。 */ Fragment fragment = fm.findFragmentById(R.id.fragement_container); /* 如果指定容器资源ID不存在,则需要新建CrimeFragement,启动新事务并添加到队列中 */ if( fragment == null){ fragment = new CrimeFragement(); fm.beginTransaction() .add(R.id.fragement_container,fragment) .commit(); /* add方法是整个事务的核心; 参数1:容器视图资源ID 参数2:新创建的CrimeFragement */ } }}
结果图
作者:黎羽鸿
2017/5/31 12:06:00
- Android Fragment 与 Fragment管理器
- Android Fragment 与 Fragment管理器
- 第七章 UI fragment与fragment 管理器
- 《android编程权威指南》学习笔记之第七章 UI fragment与fragment管理器
- android fragment与ViewPager
- Fragment与Android架构
- Fragment与Android架构
- Android Fragment与Fragment之间数据获取
- Android Fragment与Fragment之间数据获取
- Android Fragment(四)---Fragment与Activity通讯
- Android-Fragment与Fragment之间数据获取
- 推荐一款fragment管理器
- Android Fragment---创建Fragment
- Android Fragment---管理Fragment
- Android Fragment---创建Fragment
- Android Fragment---管理Fragment
- 【Android】Fragment与Activity通信
- Android Fragment与Activity通讯
- 获取iOS任意线程调用堆栈(二)符号化理论:Mach-o文件结构
- Android中Canvas绘图之PorterDuffXfermode使用及工作原理详解
- 蚂蚁金服成立科学智囊团,机器学习之父Michael I.Jordan担任主席
- PHP PSR-1 规范
- 156. Binary Tree Upside Down
- Android Fragment 与 Fragment管理器
- 获取iOS任意线程调用堆栈(三)符号化理论:从Mach-o结构分析类名方法名
- 查找成绩排名第二的学生
- Windows中的时间(SYSTEMTIME和FILETIME)
- 面试题26复杂连标的复制
- Android应用自定义View绘制方法手册
- python入门(@property,@*.setter)
- 获取iOS任意线程调用堆栈(四)符号化实战
- Liunx线程的同步