Chr*_*acy 97 android android-viewpager android-support-library
我在我的ViewPager
实例中使用的片段是非常耗费资源的,所以我只想一次加载一个.当我尝试以下内容时:
mViewPager.setOffscreenPageLimit(0);
mViewPager.setAdapter(mPagerAdapter);
Run Code Online (Sandbox Code Playgroud)
我的FragmentStatePagerAdapter.getItem(int position)
覆盖功能被调用3次,这是我打电话时发生的事情mViewPager.setOffscreenPageLimit(1)
.我希望它只被调用一次,因为我指定了0个屏幕外页面.
我相信我正在正确地呼唤一切,因为如果我打电话mViewPager.setOffscreenPageLimit(2)
,FragmentStatePagerAdapter.getItem(int position)
就像我期望的那样被召唤5次.
ViewPager是否需要至少1个屏幕外页面,或者我在这里做错了什么?
Tyl*_*vis 121
我找到的最佳方法是setUserVisibleHint
将其添加到您的片段中
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// load data here
}else{
// fragment is no longer visible
}
}
Run Code Online (Sandbox Code Playgroud)
Com*_*are 111
ViewPager是否需要至少1个屏幕外页面
是.如果我正确地阅读源代码,您应该在LogCat中收到有关此内容的警告,例如:
Requested offscreen page limit 0 too small; defaulting to 1
Run Code Online (Sandbox Code Playgroud)
小智 7
你可以尝试这样:
public abstract class LazyFragment extends Fragment {
protected boolean isVisible;
/**
* ?????Fragment??????.
* @param isVisibleToUser
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}
protected void onVisible(){
lazyLoad();
}
protected abstract void lazyLoad();
protected void onInvisible(){}
Run Code Online (Sandbox Code Playgroud)
protected abstract void lazyLoad();
protected void onInvisible(){}
Run Code Online (Sandbox Code Playgroud)
小智 7
先添加
boolean isFragmentLoaded = false;
Run Code Online (Sandbox Code Playgroud)
比
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser && !isFragmentLoaded) {
//Load Your Data Here like.... new GetContacts().execute();
isFragmentLoaded = true;
}
else{
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
70353 次 |
最近记录: |