setUserVisibleHint和onHiddenChanged使用场景

fragment切换的几种方式:

  • 第一种用法:切换fragment
/**
使用replace方法
*/
private void showMyFragment(Fragment fragment) {
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.layout_fragment, fragment);
        transaction.commit();
}

这种方法如果切换的fragment进行请求网络等会消耗流量和性能。

  • 第二种用法:add()、hide()、show()
    使用场景:add hide show进行fragment切换的时候,所以按照google老大哥的方式,添加使用add,隐藏使用hide,需要判断是否添加 如果添加直接show。
/**
     * 修改显示的内容,不会重新加载
     * newFragmeent 下一个fragment
     * currentFrament 当前的fragment
     */
    private void switchFragment(Fragment newFragmeent) {
        if (newFragmeent != currentFrament ) {
            FragmentTransaction transaction = fragmentManager.beginTransaction();
            if (!newFragmeent.isAdded()) { // 判断是否被add过
                // 隐藏当前的fragment,将 下一个fragment 添加进去
                transaction.hide(currentFrament).add(R.id.layout_content, newFragmeent).commit(); 
            } else {
                // 隐藏当前的fragment,显示下一个fragment
                transaction.hide(currentFrament).show(newFragmeent).commit(); 
            }
            currentFrament = newFragmeent;
        }
    }

使用add()、hide()、show()方法切换fragment不会走任何的生命周期 无法通过生命周期进行刷新。

  • onHiddenChanged()
    @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);

        if (hidden) {   // 不在最前端显示 相当于调用了onPause();
            //做一些事情
            return;
        }else{  // 在最前端显示 相当于调用了onResume();
           //数据刷新做一些自己的事情
        }
    }
  • setUservisibleHint()
    使用场景:当fragment结合viewpager使用的时候 这个方法会调用
    这个方法是在oncreateView之前使用 不要使用控件
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (getUserVisibleHint()) {
       //界面可见
    } else {
        //界面不可见 相当于onpause
    }
}

原文链接:https://blog.csdn.net/kristch_wu/article/details/80000148

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容