开发的时候,有时候Fragment的切换,是不需要对原先的Fragment进行重新加载的。而Fragment的界面是既可以进行重新加载,也可以不进行重新加载。
每次重新加载的话,我们是使用的replace来进行fragment的替换的。
如果,不对fragment的数据进行重新加载的话,那么就用add来添加fragment,显示的时候用show,切换的时候用hide掉当前的,show切换的目标。
具体的实现代码如下:
private FragmentManager fm; private FragmentTransaction ft;
//之前显示的fragment public Fragment mContent, fragment_in, fragment_qm, fragment_se;
//三个fragment fragment_in = new MakePlanFragment(); fragment_qm = new CourseFragment(); fragment_se = new MakePlanFragment(); setDefaultFragment(fragment_in);设置默认的fragment的显示。没有切换的时候显示的fragment。
public void setDefaultFragment(Fragment fragment) { fm = getFragmentManager(); ft = fm.beginTransaction(); ft.add(R.id.fragment_content, fragment).commit(); mContent = fragment; }
//切换fragment的显示隐藏 public void switchContent(Fragment to) { if (mContent != to) { fm = getFragmentManager(); ft = fm.beginTransaction(); if (!to.isAdded()) { // 先判断是否被add过 ft.hide(mContent).add(R.id.fragment_content, to).commit(); // 隐藏当前的fragment,add下一个到Activity中 } else { ft.hide(mContent).show(to).commit(); // 隐藏当前的fragment,显示下一个 } mContent = to; } }上面的这个switchContent的方法就是切换fragment的方法封装。在使用的地方,直接传入我们需要的目标fragment即可。如下:
switchContent(fragment_in);传参为我们要切换的目标fragment。这样就实现了我们的切换fragment,但是不重新进行加载。
如果要进行重新加载,关键代码如下:
fm = getFragmentManager(); ft = fm.beginTransaction(); ft.replace(R.id.fragment_content, fragment_in); ft.commit();这就是重载与不重新加载的区别。理解了本质就简单多了。