直接上代碼,把代碼copy到Fragment里面就可以了,最主要的就是一個方法:
setUserVisibleHint(boolean isVisibleToUser)
代碼如下:
先定義兩個成員變量:
//Fragment的View加載完畢的標記
private boolean isLoading = false;
//Fragment對用戶可見的標記
private boolean isUIVisible;
//setUserVisibleHint和lazyLoad兩個方法是為了去除viewPager+fragment的懶加載
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
//isVisibleToUser這個boolean值表示:該Fragment的UI 用戶是否可見
if (isVisibleToUser) {
isUIVisible = true;
lazyLoad();//調用下面的方法
} else {
isUIVisible = false;
}
}
private void lazyLoad() {
//這里進行雙重標記判斷,是因為setUserVisibleHint會多次回調,并且會在onCreateView執(zhí)行前回調,必須確保onCreateView加載完畢且頁面可見,才加載數(shù)據(jù)
if (!isLoading && isUIVisible) {
loadInfo();//加載數(shù)據(jù)的方法
//數(shù)據(jù)加載完畢,恢復標記,防止重復加載
isLoading = true;
isUIVisible = false;
}
}
以上是我對此功能的一個小記錄豫喧,大家有更好的方法或者問題可在下方留言。