fragment 切换判断界面是否可见 setUserVisibleHint和onHiddenChanged使用场景

转载自:fragment 切换判断界面是否可见 setUserVisibleHint和onHiddenChanged使用场景

一直记得有两个方法用来判断Fragment的,用的时候可能就随机查一下,然后就投入使用了,曾经做过一个场景:底部栏搭载着一个容器,然后通过Fragment的hide、show的方式来显示隐藏,其中有两个Fragment中有搭载着ViewPager+Fragment的形式出现,这其中还有网络请求和定时器请求,这时候就是两者结合着用来中断网络请求,并释放一些资源。但是大部分时候还是只记得有两个方法,而不急的哪个是哪个。

以下为转载内容


fragment大家经常应用到 声明周期依赖于宿主activity

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

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

2 第二种用法:add hide show------onHiddenChange()

使用场景: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();
		//数据刷新做一些自己的事情--你懂得
	}
}
3 setUservisibleHint()

使用场景:当fragment结合viewpager使用的时候 这个方法会调用

这个方法是在oncreateView之前使用 不要使用控件

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
	super.setUserVisibleHint(isVisibleToUser);
    if (getUserVisibleHint()) {
   		//界面可见
    } else {
		//界面不可见 相当于onpause
    }
}

fragment 切换判断界面是否可见 setUserVisibleHint和onHiddenChanged使用场景


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值