fragment setUserVisibleHint onHiddenChanged方法

调用 hide show 方法是,下面的方法会调用

if (currentFragment != to) { currentFragment = to; FragmentTransaction transaction = mFragmentMang.beginTransaction(); // FragmentTransaction transaction = getSupportFragmentManager().beginTransaction().setCustomAnimations( // android.R.anim.fade_in, R.anim.slide_out); if (!to.isAdded()) { // 先判断是否被add过 UtilsLog.d(); transaction.hide(from).add(R.id.fragment_container, to, fragmentag).commitAllowingStateLoss(); // 隐藏当前的fragment,add下一个到Activity中 } else { UtilsLog.d(); transaction.hide(from).show(to).commitAllowingStateLoss(); // 隐藏当前的fragment,显示下一个 } }

/**
 * fragment hide or show
 * true means hide else false
 */
@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
}

当fragment结合viewpager使用时 下面的方法会调用,而上面的方法不会调用?

/** Fragment当前状态是否可见 */
protected boolean mCurFragmentisVisible = false;

//setUserVisibleHint是在onCreateView之前调用的
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (getUserVisibleHint()) {
        mCurFragmentisVisible = true;
        onFragmentVisible();
    } else {
        mCurFragmentisVisible = false;
        onFragmentInvisible();
    }
}

/**
 * Fragment可见
 */
protected void onFragmentVisible() {
    onLazyLoad();
}

/**
 * Fragment不可见
 */
protected void onFragmentInvisible() {

}

经验分享 程序员 微信小程序 职场和发展