Android基础知识 -- Fragment
Fragment是android3.0后提供的API(所以android:minSdkVersion="11"以上版本),主要针对平板UI。有自己的生命周期,但是必须依附在Activity上,当Activity销毁后,Fragment也销毁。
注意,在使用Fragment的Activity必须要继承FragmentActivity.
1 生命周期
Fragment
-> onInflate() //该方法只在我们直接用标签在布局文件中定义的时候才会被调用
-> onAttach() //当Fragment被添加到Activity中,只调用一次
-> onCreate() //创建Fragment,只会被调用一次
-> onCreateView() //每次创建,绘制该Fragment的View组件时,会将显示的View返回
-> onActivityCreated() //当Fragment所在的Activity启动完成
-> onStart() //启动Fragment被回调
-> onResume()-> running // 恢复Fragment,onStart()后,
-> onPause()->pause // Activity转到后台、Fragment被删除/替换、Fragment被添加到Back栈
-> onStop()->stop // 停止Fragment时回调
-> onDestoryView() // 销毁Fragment包含的View,如果此时从Back栈回滚到前台,会调用onCreateView()生命周期方法。
-> onDestory() // 销毁Fragment时
-> onDetach() // Fragment从Activity被删除/替换完成后回调该方法,onDestory()后肯定会执行此方法
-> finish
2 使用方式
首先需要定义XML布局文件,此布局文件为Fragment子类的onCreateView()方法中加载。
然后自定义Fragment类,继承Fragment或其子类,实现onCreateView()方法,在方法中通过inflater.inflate()方法加载xml布局文件。
2.1 静态声明
<1> 在需要加载Fragment的Activity的布局文件中,使用自定义Fragment标签,标签属性中: android:name="package.MyFragment"
<2> 在setContentView()加载布局文件
2.2 动态代码
<1> 获取FragmentManager实例,
通过getFragmentManager()/getSupportFragmentManager(); (两种获取实例的差异在于Fragment相关类使用的是android.app包还是android.support.v4.app包)
<2> 获取FragmentTransaction实例,fm.beginTransaction();
<3> 调用add()/replace()方法加载Fragment( add(容器,fragment实例)、replace(viewId,fragment实例) )。
<4> 调用fm.commit()方法提交事务。
3 Fragment管理和事务
3.1 Fragment管理
Activity管理Fragment主要依靠FragmentManager
findFragmenetById() //获取指定Fragment
popBackStack() //弹出栈
addToBackStack() // 加入栈
addOnBackStackChangedListener() // 监听后台栈变化
3.2 Fragment事务
Fragment事务需要FragmentTransaction。
FragmentTransaction ft = fm.beginTransaction();
ft.add()
ft.replace()
ft.remove()
ft.commit(); //最后需要提交事务
4 交互
4.1 获取组件
<1> Fragment获取Activity中组件 :getActivity().findViewById(R.id.viewID);
<2> Activity获取Fragment中组件 :getFragmentManager.findFragmentById(R.id.fragmentID); (也可以是用tag : findFragmentByTag())
4.2 数据交互
4.2.1 Activity -> Fragment
在Activity中创建Bundle数据包,使用Fragment实例调用setArguments(bundle)将数据包传递给Fragment,Fragment中,调用getArguments()获得Bundle对象
4.2.2 Fragment -> Activity
在Fragment中定义一个回调接口,在Activity中实现接口,Fragment通过回调方法传递数据给Activity
<1> fragment中代码:
/*接口*/
public interface CallBack{
/*定义一个获取信息的方法*/
public void getResult(String result);
}
/*接口回调*/
public void getData(CallBack callBack){
/*获取文本框的信息,当然你也可以传其他类型的参数,看需求咯*/
String msg = editText.getText().toString();
callBack.getResult(msg);
}
<2> Activity中代码:
/* 使用接口回调的方法获取数据 */
leftFragment.getData(new CallBack() {
@Override
public void getResult(String result) {
/*打印信息*/
Toast.makeText(MainActivity.this, "-->>" + result, 1).show();
}
});
4.2.3 Fragment -> Fragment
可以使用Activity为媒介,先从F1中得到数据,然后传入F2中。
Android基础知识 -- Fragment的更多相关文章
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- 【Android基础】Fragment 详解之Fragment生命周期
上一篇文章简单介绍了一下Fragment,这一篇文章会详细的说一下Fragment的生命周期和创建一个用户界面. Fragment的主要功能就是创建一个View,并且有一个生命周期来管理这个View的 ...
- Android基础知识(一)
前言 前言 从软件测试最终目的发现问题缺陷来看,Findyou比较认同一个观念,测试的能力大致可以划分成三个能力层次:发现问题.定位问题.预防问题.有机会探讨一下这个分类. 发现问题各种方式方法,比如 ...
- Android基础知识巩固:关于PendingIntent和广播
平时使用广播的场合比较多,但细节的东西,看过了也没有总结,以至于某些场合有小问题,还是要把原理和属性搞清楚才能运用自如. 其实也是自己比较懒,先看别人的blog,有个概念再去官网看英文的能好理解一些. ...
- Android基础知识大全(精品)
[1].ProgressBar <ProgressBar android:id="@+id/progress_bar" android:layout_width=&quo ...
- <Android基础> (四) Fragment Part 2
4.3 Fragment的生命周期 4.3.1 Fragment的状态和回调 1.运行状态 当一个Fragment是可见的,并且它关联的活动正处于运行状态是,该Fragment也处于运行状态 2.暂停 ...
- <Android基础>(四) Fragment Part 1
Fragment 1)Fragment的简单用法 2)动态添加Fragment 3)在Fragment中模拟返回栈 4)Fragment和活动之间通信 第四章 Fragment Fragment是一种 ...
- android开发学习---linux下开发环境的搭建&& android基础知识介绍
一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- Android基础——使用Fragment适应不同屏幕和分辨率
最近事情很忙,一个新项目赶着出来,但是很多功能都要重新做,一直在编写代码.Debug.今天因为一个新程序要使用Fragment来做,虽然以前也使用过Fragment,不过没有仔细研究,今天顺道写篇文章 ...
随机推荐
- 基于Docker的Consul集群实现服务发现
服务发现 其实简单说,服务发现就是解耦服务与IP地址之间的硬绑定关系,以典型的集群为例,对于集群来说,是有多个节点的,这些节点对应多个IP(或者同一个IP的不同端口号),集群中不同节点责任是不一样的. ...
- 如何修复MacBook Pro过热:保持MacBook散热的13个技巧
尽管MacBook Pro是一台能处理繁重工作量的高能效机器,但它却无法像市场上其他笔记本电脑一样避免过热.至于什么可以防止发热,那不是一两个技巧就能解决的问题.相反,这是一组技巧可以解决的挑战. 因 ...
- <a>超链接标签,<button>按钮标签,实现返回跳转
超链接: <a href=”#” onClick=”javascript :history.back(-1);”>返回上一页</a> <a href=”#” onClic ...
- [Blog] Part1: 技术札记-写个创站小结吧
创站绝对是一个大坑 我当初真有勇气.. 嗯 这个站主要就是 Github+Jekyll+markdown 基本上还是现在能用的比较习惯的模式 基本流程概述 域名 -> 修改DNS -> g ...
- 吴裕雄--天生自然HADOOP操作实验学习笔记:分布式资源调度系统yarn的安装
实验目的 复习配置hadoop初始化环境 复习配置hdfs的配置文件 学会配置hadoop的配置文件 了解yarn的原理 实验原理 1.yarn是什么 前面安装好了hdfs文件系统,我们可以根据需求进 ...
- 吴裕雄--天生自然 HADOOP大数据分布式处理:安装WinSCP
下载安装包
- Java虚拟内存(栈、堆)
一.java虚拟的内存可以分为几种 1. 第一种 栈(stack) 栈的特点 1.1 栈描述的是方法执行的内存模型,每个方法都被调用都会创建一个栈(存储局部变量.操作数. 方法出口等) 1.2 JVM ...
- lvs使用进阶
之前lvs基础篇(https://www.cnblogs.com/ckh2014/p/10855002.html)中介绍了lvs-dr的搭建,下面我们再复习一下,架构如下: 相关配置 director ...
- css实现带边框的冒泡提示框
需求是实现这种效果, 因为内容是动态的,使用图片不是很好: 原因: 如果内容确定只是一行,可以效果图裁剪3部分,分别是两侧和中间部分,然后用backgroud插入三张图片,但是要是内容是2行就不好处理 ...
- 对于tensorflow中的gradient_override_map函数的理解
# #############添加############## def binarize(self, x): """ Clip and binarize tensor u ...