Fragment

来源:互联网 发布:sql语言是什么语言 编辑:程序博客网 时间:2024/06/12 19:42
<pre name="code" class="java">FragmentManager fm = getFragmentManager();FragmentTransaction ft = fm.beginTransaction();fa = new FragmentA();ft.add(R.id.fl, fa, "aaa");ft.commit();


FragmentManager fm = getFragmentManager();FragmentTransaction ft = fm.beginTransaction();fa = new FragmentA();ft.replace(R.id.fl, fa, "aaa");ft.commit();

add是添加Fragment 到 ViewGroup 中, 可以多次添加,会重叠;  与hide 结合使用,Fragment 方法不用从头走一遍;

(replace方法相当于remove, add结合使用;  remove从当前manager中移除,则前一个(没加入栈的前提下)不能通过 findFragmentByTag找到;

此时fragment对象依然有效,内部成员变量的值依然保存在内存中;  要注意:当重新走一遍生命周期 成员变量的值的问题) ;


add 和 hide ,当activity销毁重新创建出现重影问题: 由于 activity 的 onSaveInstanceSate 中调用了父类的方法, 说明fragment也要重新创建;

重新创建时 oncreate 通过 bundle 传递 了 Fragment对象;   因此  一般 saveInstance==null 才创建 fragment对象,避免内存中两个一样

的Fragment对象,造成重影; 另外, 成员变量的引用 可以通过findFragmentByTag获得内存中的fragment对象;   注意: fragment也

可通过 onSaveInstanceState保存状态,以便恢复用;

另外  加上 addToBackStack后,  findFragmentByTag 总能找到它;

///

addToBackState(String tag) ; 

tag用于标记一次事务;

一次事务能提交多个Fragment到回退栈; 

当出栈时,一次事务的 fragment都会出栈;


此外看看:

http://www.jianshu.com/p/d9143a92ad94


0 0