我有一个 ViewPager ,我正在使用 FragmentStatePagerAdapter 来保存我的片段。现在的问题是,当我滑动 OnCreateView 并且片段的 OnCreate 被称为每次时,我会在片段中进行网络调用一次又一次地叫来造成滞后。
我已经从here
复制了如何避免致电OnCreateView
的{{1}}和OnCreate
。
这是我的代码:
FragmentHolder.class
Fragments
MainActivity:
public class ViewPagerAdapter extends SmartFragmentStatePagerAdapter {
final int PAGE_COUNT = 3;
private final ArrayList<Fragment> mFragments = new ArrayList<>();
private long baseId = 0;
private String tabTitles[] = new String[] { "HOME", "DISCOVER", "MESSAGES" };
private Context context;
private TabLayout tabLayout;
public int[] imageResId = {
R.drawable.ic_ac_unit_black_24dp,
R.drawable.ic_airport_shuttle_black_24dp,
R.drawable.ic_all_inclusive_black_24dp
};
public ViewPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public Fragment getItem(int position) {
if(position == 0)
{
Log.d("Fragment","1");
return FragmentOne.newInstance(position + 1);
}
else if(position == 1)
{
Log.d("Fragment","2");
return FragmentTwo.newInstance(position + 2);
}
else if(position == 2)
{
Log.d("Fragment","3");
return FragmentThree.newInstance(position + 3);
}
return new Fragment();
}
@Override
public CharSequence getPageTitle(int position)
{
Drawable image = ContextCompat.getDrawable(context, imageResId[position]);
image.setBounds(0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight());
SpannableString sb = new SpannableString(" ");
ImageSpan imageSpan = new ImageSpan(image, ImageSpan.ALIGN_BOTTOM);
sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return sb;
}
}
答案 0 :(得分:3)
是的,使用setOffscreenPageLimit为3(取决于您拥有的片段数),允许您保留片段(不调用CreateView)
lockableViewPager.setOffscreenPageLimit(3);