BaseLoadFragment
當(dāng)fragment可見(jiàn)的時(shí)候再加載數(shù)據(jù)
public abstract class BaseLoadFragment<P extends IPresenter> extends BaseFragment<P> {
private boolean isViewCreated; // 界面是否已創(chuàng)建完成
private boolean isVisibleToUser; // 是否對(duì)用戶可見(jiàn)
private boolean isDataLoaded; // 數(shù)據(jù)是否已請(qǐng)求
/**
* 第一次可見(jiàn)時(shí)觸發(fā)調(diào)用,此處實(shí)現(xiàn)具體的數(shù)據(jù)請(qǐng)求邏輯
*/
protected abstract void lazyLoadData();
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisibleToUser = isVisibleToUser;
tryLoadData();
}
/**
* 保證在initData后觸發(fā)
*/
@Override
public void onResume() {
super.onResume();
isViewCreated = true;
tryLoadData();
}
/**
* ViewPager場(chǎng)景下,判斷父fragment是否可見(jiàn)
*/
private boolean isParentVisible() {
Fragment fragment = getParentFragment();
return fragment == null || (fragment instanceof BaseLoadFragment && ((BaseLoadFragment) fragment).isVisibleToUser);
}
/**
* ViewPager場(chǎng)景下,當(dāng)前fragment可見(jiàn)時(shí),如果其子fragment也可見(jiàn),則讓子fragment請(qǐng)求數(shù)據(jù)
*/
private void dispatchParentVisibleState() {
FragmentManager fragmentManager = getChildFragmentManager();
List<Fragment> fragments = fragmentManager.getFragments();
if (fragments.isEmpty()) {
return;
}
for (Fragment child : fragments) {
if (child instanceof BaseLoadFragment && ((BaseLoadFragment) child).isVisibleToUser) {
((BaseLoadFragment) child).tryLoadData();
}
}
}
public void tryLoadData() {
// boolean parentVisible = isParentVisible();
// if (isViewCreated && isVisibleToUser && parentVisible && !isDataLoaded) {
if (isViewCreated && isVisibleToUser && !isDataLoaded) {
lazyLoadData();
isDataLoaded = true;
//通知子Fragment請(qǐng)求數(shù)據(jù)
dispatchParentVisibleState();
}
}
}
新建fragment繼承自extends BaseLoadFragment,然后實(shí)現(xiàn)lazyLoadData,實(shí)現(xiàn)數(shù)據(jù)加載。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。