Fragment
来源:互联网 发布:js循环table tr 编辑:程序博客网 时间:2024/06/17 03:22
一,概述
为了支持动态的或者是多个页面同时显示,android提供了fragment组件;
如果应用最小支持的sdk为11以上,则可以直接使用系统类库,否则要使用 Support Library
二,创建一个fragment
继承于Fragment类,必须要提供onCreateView回调提供Fragment的视图;
每个Fragment类似于Activity,都会有自己的生命周期,其中部分的回调受所在的Activity控制,比如Activity调用onPause()会导致它所有的Fragment调用onPause()
三,使用xml在Activity中添加Fragment
1,在xml中添加的fragment无法动态添加和移除,所以必须在代码中动态添加或者移除
2,使用FragmentActivity代替Activity
四,动态使用Fragment
1,FragmentActivity必须有root view
FrameLayout rootView = new FrameLayout(this);rootView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));rootView.setId(android.R.id.primary);
2,在FragmentActivity onCreate中添加最初始的Fragment
3,FragmentManager
The FragmentManager
class provides methods that allow you to add, remove, and replace fragments to an activity at runtime in order to create a dynamic experience.
具体的实现是FragmentTransaction;
FragmentTransaction ft = fragmentManager.beginTransaction();
4,addToBackStack
可以在commit之前使用addToBackStack将上次的transaction放到一个堆栈中,这样点击后退键的时,就能恢复上次的操作;
</pre><pre name="code" class="java"> 5,BackStackEntry
<pre name="code" class="java"> FragmentTransaction 添加删除fragment并不会对这个栈进行操作,只有addToBackStack,popBackStack才可以;
<pre name="code" class="java"> 6,popBackStack(tag, 0);
可以清空包括tag及其之上的所有fragment
五:fragment之间的交互
1,fragment之间的交互要通过它们关联的activity来进行
2,activity可以通过findFragmentById来获取对应的fragment,并进行交互;
也可以通过fragmentManager.findFragmentByTag(tag)获取对应的fragment;
在添加的时候使用FragmentTransactio add(android.R.id.primary,fragment, fragment.getClass().getName())来设置tag;
六,源码
1,popBackStack
会将其上的所有节点删除;
for (int i=mBackStack.size()-1; i>index; i--) {1446 states.add(mBackStack.remove(i));1447 }
2,addOnBackStackChangedListener
这个回调不管是添加还是删除stack节点都会调用
- Fragment
- Fragment
- fragment
- Fragment
- Fragment
- Fragment
- Fragment
- fragment
- fragment
- Fragment
- Fragment
- fragment
- Fragment
- Fragment
- Fragment
- Fragment
- Fragment
- fragment
- 如何让struts2和servlet的共存
- 查出数字字符字段中非数字字符的记录
- linux 删除乱码文件
- 工作中一些常见错误总结(不断总结)
- oracle 内连接 外连接 查询 笔记
- Fragment
- 1006. Sign In and Sign Out (25)
- 搭建内部Openwrt Git仓库
- LeetCode 205 - Isomorphic Strings
- bluetoothChat
- 数据库oracle--oracle与mysql
- Unbuntu中安装JDK
- 对象初始化为null的好处
- 线程创建的一种特殊用法