前言
讲过Activity向fragment传值的知识的时候,涉及到Activity向Fragment跳转的问题。今天就来讲讲Fragment跳转显示和隐藏与Fragment生命周期的关系
今天涉及的内容有:
- FragmentTransaction的add()和remove()系列方法经过的Fragment生命周期
- FragmentTransaction的show()和hide()方法经过的Fragment生命周期
- onHiddenChanged(boolean hidden)方法讲解
- 具体的代码
- 一些个人建议
一. FragmentTransaction的add()和remove()系列方法经过的Fragment生命周期
现在在MainActivity中写一个单纯跳转Fragment的方法,如下:
/***
* 单纯的打开一个Fragment
*
* @param containerId 加载fragment的容器id
* @param tag fragment对应的tag
* @param bundle 传值
* @param listener 若fragment为空则在这个listener中创建fragment
* @return
*/
private Fragment startFragment(int containerId,String tag,Bundle bundle,OnCreateFragmentListener listener){
FragmentManager manager=getSupportFragmentManager();
Fragment fragment=manager.findFragmentByTag(tag);
if(fragment==null){
fragment=listener.CreateFragment();
}
if(!fragment.isAdded()) {
FragmentTransaction transaction=manager.beginTransaction();
//传值
if(bundle!=null){
fragment.setArguments(bundle);
}
transaction.add(containerId, fragment, tag);
transaction.commitAllowingStateLoss();
}
return fragment;
}
/**涉及跳转的接口类**/
public interface OnCreateFragmentListener{
Fragment CreateFragment();
}
然后在MainActivity中执行向FragmentB的跳转:
//单纯的打开一个Fragment
mFragmentB= (FragmentB) startFragment(R.id.fr_layout, mTagArray[1], null, new OnCreateFragmentListener() {
@Override
public Fragment CreateFragment() {
return new FragmentB();
}
});
在FragmentB中观察生命周期,执行了以下方法:
onAttach ——> onCreate ——> onCreateView ——> onActivityCreated ——> onStart ——> onResume
然后在MainActivity中建一个关闭Fragment的方法,如下: