Android基础知识--切换Fragment解决方案

简略查看Fragment生命周期


Android基础知识--切换Fragment解决方案_第1张图片
生命周期图

Android基础知识--切换Fragment解决方案_第2张图片
与Activity生命周期函数关系图

1 Fragment预先写入布局文件中

这种方案的问题:如果更换Fragment,需改动两个文件,而且不能动态加载,局限性比较大。

  
    
    
    
    

2 Replace()替换Fragment

这种方案的问题在于每次调用replace()方法时Fragment的生命周期会重走。这在现实开发中是不允许的。
说明:在替换之前,系统会调用之前Fragment的生命周期函数
onPause()
onStop()
onDestroy()
onDetach()
然后调用替换的Fragment生命周期函数
onAttach()
onCreat()
onCreatView()
onActivityCreated()
onStart()
onResume()

  transaction.replace(R.id.fragment_, fragmentCurrent);

3 添加(add),隐藏(hide),显示(show)

预先将Fragment对象添加到集合,加载时从集合取出Fragment对象添加到FragmentTransaction即可,切换Fragment,调用show()。隐藏之前Fragment,调用hide()。
说明:无论调用show()还是hide(),系统不会调用Fragment的任何生命周期函数。

{
  //定义集合
  List fragments = new ArrayList();
  //判断Fragment是否添加
  Fragment fragment = getSupportFragmentManager().findFragmentByTag(fragments.get(currentIndex).getClass().getName());
  fragment.isAdded();
  //Fragment对象添加到FragmentTransaction
  FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
  ft.add(R.id.fragment, fragment, fragment.getClass().getName());
  //隐藏Fragment
  ft.hide(fragment);
  //显示Fragment
  ft.show(fragment);
  //最后一步,提交
  ft.commit();
}

4 添加(add),分离(detach),粘贴(attach)

预先将Fragment对象加入集合,使用时从集合取出Fragment对象添加到FragmentTransaction事物中。
之后每次切换Fragment,分离之前Fragment,粘贴切换的Fragment。
说明:调用detach()函数后Fragment的生命周期函数
onPause()
onStop()
onDestroyView()都会被执行;
调用attach()函数后Fragment的生命周期函数
onCreateView()
onActivityCreated(Bundle)
onResume()会被再次执行。

{
   FragmentTransaction ft = mFragmentManager.beginTransaction();
   ft.add(mContainerId, fragment, newNavButton.getTag());
   ft.detach(oldNavButton.getFragment());
   ft.attach(newNavButton.getFragment());
   ft.commit();
}

Android Fragment切换解决方案

你可能感兴趣的:(Android基础知识--切换Fragment解决方案)