FragmentTransaction replace add
来源:互联网 发布:php输出中文乱码 编辑:程序博客网 时间:2024/05/24 04:57
使用 FragmentTransaction 的时候,它提供了这样两个方法,一个 add , 一个 replace ,对这两个方法的区别一直有点疑惑。我觉得使用 add 的话,在按返回键应该是回退到上一个 Fragment,而使用 replace 的话,那个别 replace 的就已经不存在了,所以就不会回退了。但事实不是这样子的。add 和 replace 影响的只是界面,而控制回退的,是事务。
1、
public abstract FragmentTransaction add (int containerViewId, Fragment fragment, String tag)
Add a fragment to the activity state. This fragment may optionally also have its view (if Fragment.onCreateView returns non-null) into a container view of the activity.
add 是把一个fragment添加到一个容器 container 里。
public abstract FragmentTransaction replace (int containerViewId, Fragment fragment, String tag)
Replace an existing fragment that was added to a container. This is essentially the same as calling remove(Fragment) for all currently added fragments that were added with the same containerViewId and then add(int, Fragment, String) with the same arguments given here.
replace 是先remove掉相同id的所有fragment,然后在add当前的这个fragment。
public FragmentTransaction replace(int containerViewId, Fragment fragment, String tag) { if (containerViewId == 0) { throw new IllegalArgumentException("Must use non-zero containerViewId"); } doAddOp(containerViewId, fragment, tag, OP_REPLACE); return this;}
2、add 和 replace 方法都是调用的 doAddOp 方法。也就是把一个操作 Op 添加到队列。
private void doAddOp(int containerViewId, Fragment fragment, String tag, int opcmd) { fragment.mFragmentManager = mManager; if (tag != null) { if (fragment.mTag != null && !tag.equals(fragment.mTag)) { throw new IllegalStateException("Can't change tag of fragment " + fragment + ": was " + fragment.mTag + " now " + tag); } fragment.mTag = tag; } if (containerViewId != 0) { if (fragment.mFragmentId != 0 && fragment.mFragmentId != containerViewId) { throw new IllegalStateException("Can't change container ID of fragment " + fragment + ": was " + fragment.mFragmentId + " now " + containerViewId); } fragment.mContainerId = fragment.mFragmentId = containerViewId; } Op op = new Op(); op.cmd = opcmd; op.fragment = fragment; addOp(op);}
- FragmentTransaction replace add
- FragmentTransaction add 和 replace 区别
- FragmentTransaction add 和 replace 区别
- FragmentTransaction add 和 replace 区别
- FragmentTransaction add 和 replace 区别
- FragmentTransaction add 和 replace 区别
- FragmentTransaction add 和 replace 区别
- FragmentTransaction add 和 replace 区别
- FragmentTransaction add replace remove方法
- FragmentTransaction add 和 replace 区别
- FragmentTransaction add 和 replace 区别
- FragmentTransaction add 和 replace 区别
- FragmentTransaction add 和 replace 区别
- FragmentTransaction add 和 replace 区别
- FragmentTransaction的 add 和 replace 区别
- FragmentTransaction add 和 replace 完全解析
- FragmentTransaction的replace()方法和add()方法
- FragmentTransaction add和replace方法的区别
- java并发-CyclicBarrier-实战应用
- webapp和mobileapp分析
- INSTALL_PARSE_FAIL_NO_CERTIFICATE 打jar包的时候遇到的问题。
- spring-mvc中返回fastjson的json数据去掉null值
- 计划
- FragmentTransaction replace add
- linux清理内存
- 文件处理之浏览文件
- file的getPath getAbsolutePath和getCanonicalPath的不同
- RadioButton使用方法
- 51nod--1134 最长递增子序列 (动态规划)
- SpringMVC之application-context.xml,了解数据库相关配置
- C# 编写计算器
- C++扬帆远航——12(抓小偷)