源码给你 自己体会
/*** * util * 1.fragment add and monitor showing and hiding */ private Fragment mFragment; private FragmentSubscriber subscriber; protected void addFragment(int frameLayoutId, Fragment fragment) { if (subscriber == null) { subscriber = new FragmentSubscriber(); getSupportFragmentManager().registerFragmentLifecycleCallbacks(subscriber, false); } if (fragment != null) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); if (fragment.isAdded()) { if (mFragment != null) { mFragment.setUserVisibleHint(false); fragment.setUserVisibleHint(true); transaction.hide(mFragment).show(fragment); } else { fragment.setUserVisibleHint(true); transaction.show(fragment); } } else { if (mFragment != null) { mFragment.setUserVisibleHint(false); transaction.hide(mFragment).add(frameLayoutId, fragment); } else { transaction.add(frameLayoutId, fragment); } } mFragment = fragment; transaction.commit(); } } static class FragmentSubscriber extends android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks { @Override public void onFragmentViewCreated(android.support.v4.app.FragmentManager fm, Fragment f, View v, Bundle savedInstanceState) { super.onFragmentViewCreated(fm, f, v, savedInstanceState); f.setUserVisibleHint(true); //这样是合理的 因为不可能一add就hide //这样做是需要的 因为onCreate show是准确的一个Fragment visible的时机 } }
Fragment中重写
@Override public void setUserVisibleHint(boolean isVisibleToUser) { //do sth }