【发布时间】:2016-03-12 07:09:06
【问题描述】:
我有一个 ViewPager 并且我正在使用 FragmentStatePagerAdapter 来保存我的片段。现在的问题是,当我滑动片段的 OnCreateView 和 OnCreate 时,everytime 被调用,我在片段中进行网络调用,这将是一次又一次地调用导致延迟。
我是从here复制过来的
如何避免调用OnCreateView 的OnCreateView 和OnCreate。
这是我的代码:
FragmentHolder.class
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;
}
}
主活动:
lockableViewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(),
Dashboard.this));
lockableViewPager.setSwipeable(false);
lockableViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position == 0) {
fragmentOne.message();
} else if (position == 1) {
fragmentTwo.message();
} else if (position == 2) {
fragmentThree.message();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
【问题讨论】:
标签: android android-fragments android-viewpager oncreate