每次都会调用Fragment中的OnCreateView

时间:2016-03-12 07:09:06

标签: android android-fragments android-viewpager oncreate

我有一个 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;
    }
}

1 个答案:

答案 0 :(得分:3)

是的,使用setOffscreenPageLimit为3(取决于您拥有的片段数),允许您保留片段(不调用CreateView)

        lockableViewPager.setOffscreenPageLimit(3);