由于最近工作需求,fragment中的Toast在fragment被切換之后依然顯示出來(lái)了闻察,這對(duì)用戶的體驗(yàn)很不好发乔。
那么如何來(lái)判斷fragment對(duì)用戶可見(jiàn)呢?
1.fragment在activity中之間使用:
這種情況是最簡(jiǎn)單的,因?yàn)榇藭r(shí)的fragment的生命周期是和activity的生命周期一致的,當(dāng)打開(kāi)另外一個(gè)activity的時(shí)候嬉挡,只要監(jiān)聽(tīng)Fragment的onResume和onPause方法就能夠判斷其顯隱(至于這兩個(gè)方法什么意思就不多說(shuō)了,不懂的自己去看activity和fragment的生命周期)
@Override
public void onResume() {
?????? super.onResume();
}
@Override
public void onPause() {
super.onPause();
}
2.在ViewPager中的Fragment
ViewPager中Fragment左右切換時(shí),是不會(huì)調(diào)用onResume()和onPause()方法的。因?yàn)檫@兩個(gè)方法是跟隨activity的生命周期來(lái)走的汇恤,這個(gè)時(shí)候我們就可以在fragment中重新 setUserVisibleHint(boolean? isVisibleToUser)方法來(lái)監(jiān)聽(tīng)Fragment是否可見(jiàn):
@Override
public voidsetUserVisibleHint(booleanisVisibleToUser) {
???????????? super.setUserVisibleHint(isVisibleToUser);
???????????? if(isVisibleToUser){
???????????????????????? //可見(jiàn)
????????????? }else{
?????????????? ? ? ? ? //不可見(jiàn)
???????????? }
}
3.使用show()和hide()方法來(lái)顯示隱藏fragment
這種情況是在一個(gè)activity中fragment切換成另外一個(gè)fragment庞钢,那么上面兩種監(jiān)聽(tīng)你會(huì)發(fā)現(xiàn)都沒(méi)卵用,此時(shí)我們可以監(jiān)聽(tīng)onHiddenChanged(boolean hidden)方法來(lái)判斷是否對(duì)用戶可見(jiàn)因谎。
@Override
public void? onHiddenChanged(booleanhidden) {
???????? super.onHiddenChanged(hidden);
?????? ? if(hidden){
??????????????????????? //不可見(jiàn)
????????? }else{
????? ? ? ? ?????????? //可見(jiàn)
???????? }
}