Fragment可見/不可見時的生命週期回調函數
項目中經常會碰到,需要在fragment失去焦點和獲得焦點的方法中進行一些設置,但是fragment沒有onpause()和onResume()方法,你重寫的這兩個方法,都是fragment依附的activity的生命週期。
那麼需要fragment有像activity生命週期onpause()和onResume()這樣的方法怎麼辦,谷歌爲我們提供了setUserVisibleHint和onHiddenChanged這兩個方法,這兩個方法的使用場景是有所不同的!
1.FragmentPagerAdapter+ViewPager的使用場景
● 使用setUserVisibleHint
使用FragmentPagerAdapter+ViewPager時,切換回上一個Fragment頁面時(已經初始化完畢),不會回調任何生命週期方法,也不會走onHiddenChanged()方法,所以在viewPage配合fragment搭建頁面的情況下,切換頁面時候,只能使用setUserVisibleHint方法。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// 相當於onResume()方法
} else {
// 相當於onpause()方法
}
}
2.Fragment ,add()+show()的使用場景
● 使用onHiddenChanged的使用
hide()跳轉新的Fragment時,舊的Fragment回調onHiddenChanged(),不會回調onStop()等生命週期方法,而新的Fragment在創建時是不會回調onHiddenChanged(),所以一般會和onresume()方法配合使用。具體場景自己來判斷。
@Override
public void onHiddenChanged(boolean hidden) {
if (hidden) {
//相當於Fragment的onPause
System.out.println("界面不可見");
} else {
// 相當於Fragment的onResume
System.out.println("界面可見");
}
}
Fragment內控制切換Fragment!
//確定後跳到抓取圖片碎片:Resultragment
ManagerActivity managerActivity =(ManagerActivity) getActivity();
managerActivity.setSelect(0);//切換到抓取成功fragment!
前提是主Activity內寫好了選擇碎片的方法 如setSelect(0);
感謝這位博主 解決了我的問題
————————————————
版權聲明:本文爲CSDN博主「遜時志敏」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xunshishi/article/details/52268940