【问题标题】:android - inflate fragment view only when choosing its tabandroid - 仅在选择其选项卡时膨胀片段视图
【发布时间】:2016-09-25 10:34:21
【问题描述】:

我有一个PagerAdapter,它创建了 3 个片段。 在MainActivity 我这样设置ViewPager

    ViewPager pager = (ViewPager) findViewById(R.id.pager);
    pager.setOffscreenPageLimit(2);
    pager.setAdapter(new PagerAdapter(getSupportFragmentManager()));

pager.setOffScreenPageLimit(2) 来自这里https://stackoverflow.com/a/11852707/1662033,以确保每个片段都调用一次OnViewCreated

这是我的PagerAdapter

public class PagerAdapter extends FragmentPagerAdapter {

    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "Home";
            case 1:
                return "Live";
            case 2:
                return "Gallery";
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new HomeFragment();
            case 1:
                return new LiveFragment();
            case 2:
                return new GalleryFragment();
            default:
                return null;
        }
    }
}

在当前代码中:所有片段的onCreateViewonActivityCreated 等都在开头调用一次,仅此而已。

我遇到的问题是 - 在其中一个片段 (LiveFragment) 中,我有一个自定义视图,它连接到摄像头并显示实时流。

我想要的是 - 仅在用户导航到片段时膨胀 LiveFragment 的视图,而不是现在的方式 - 它在开始时与其他片段一起膨胀。

有没有办法只在选择片段时调用onCreateView

【问题讨论】:

    标签: android android-fragments android-viewpager fragment android-inflate


    【解决方案1】:

    FragmentPagerAdapter 创建所有 Fragment 并始终将它们全部保存在内存中。即,您的所有片段仅创建一次,您可以在它们周围导航。

    默认情况下,FragmentStatePagerAdapter 在任何给定时间在内存中创建并只有 3 个 Fragment(当前 Fragment 以及当前 Fragment 的左右 Fragment)。你不能减少这个数字。但是,您可以使用viewpager.setOffScreenPageLimit() 增加内存中的片段数。

    由于您只有 3 个 Fragment,因此在 Viewpager 初始化时会创建所有 3 个 Fragment。您可以使用viewpager.addOnPageChangeListener() 跟踪当前在屏幕上可见的片段。使用它,您可以仅当片段当前可见时,将 LiveFragment 的视图从虚拟视图更改为实际视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2016-07-28
      • 2016-02-04
      • 2013-07-10
      • 1970-01-01
      • 2016-04-12
      相关资源
      最近更新 更多