android - 每次都会调用 Fragment 中的 OnCreateView

标签 android android-fragments android-viewpager oncreate

我有一个 ViewPager 并且我正在使用 FragmentStatePagerAdapter 来保存我的 fragment 。现在的问题是,当我滑动 fragment 的 OnCreateViewOnCreate 时,everytime 并且我在 fragment 中进行网络调用,这将是一次又一次地调用导致延迟。

我从here复制过来的

如何避免调用 FragmentsOnCreateViewOnCreate

这是我的代码:

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;
    }
}

主要 Activity :

  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) {

        }
    });

最佳答案

是的,将 setOffscreenPageLimit 设置为 3(取决于您拥有的 fragment 数),允许您保留 fragment (不调用 CreateView)

        lockableViewPager.setOffscreenPageLimit(3);

关于android - 每次都会调用 Fragment 中的 OnCreateView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35954836/

相关文章:

android - 不同构建风格的不同应用名称?

android - getItem 与 getItemAtPosition

android - 实现一些功能,比如在 Instagram android 应用程序中

java - 如何在 fragment 之间切换而不必重新创建每个 fragment ?

Android 在 fragment 中保存谷歌地图状态

设置当前项目/页面时,Android ViewPager 抛出 IndexOutOfBounds 异常

android - 在屏幕旋转时在 ViewPager 中保存 fragment 状态

带有图像的 Android ViewPager : memory leak/app crashes

android - Google oauth 使用 native 客户端在 Android 设备上登录代号 one 无法正常工作

未找到 Android NDK 构建路径