【问题标题】:Child's viewpager destroyed/getting invisible after parent viewpager's page slide在父 viewpager 的页面幻灯片后,孩子的 viewpager 被破坏/变得不可见
【发布时间】:2016-10-16 12:09:07
【问题描述】:

我的活动中有一个 ViewPager(父 ViewPager),有 4 个片段。其中一个片段实现了具有自动滑动功能的滑动 ViewPager(子 ViewPager)。

当我将父 ViewPager 滑动到选项卡 3,然后我返回到包含滑动 ViewPager 的第一个片段时,一些幻灯片消失了,而另一些则保留了下来。当我来回滑动 ViewPager(子 ViewPager)几次时,它会恢复到原来的状态。

我假设在滑动父 ViewPager 时,滑动视图分页器的片段状态会丢失。

这是父 ViewPager 的适配器:

public class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
} 

这是子 ViewPager 的适配器(滑块):

class sliding_PageAdapters extends FragmentPagerAdapter {
    int mNumOfTabs;

    public sliding_PageAdapters(FragmentManager fm, int numTabs) {
        super(fm);
        this.mNumOfTabs = numTabs;
    }

    @Override
    public void destroyItem(ViewGroup viewPager, int position, Object object) {
        viewPager.removeView((View) object);
    }

    @Override
    public Fragment getItem(int position) {
        Bundle ar = new Bundle();
        FragmentHomeImages fragment = new FragmentHomeImages();

        switch (position) {
            case 0:

                ar.putString("number", "0");
                fragment.setArguments(ar);
                return fragment;

            case 1:
                ar.putString("number", "1");
                fragment.setArguments(ar);
                return fragment;

            case 2:

                ar.putString("number", "2");
                fragment.setArguments(ar);
                return fragment;

            case 3:

                ar.putString("number", "3");
                fragment.setArguments(ar);
                return fragment;

            default:
                return null;
        }

    }

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

子 ViewPager 在这里被getChildFragmentManager() 调用:

sliding_pagerAdapter = new sliding_PageAdapters(getChildFragmentManager(), 4);

父 ViewPager 在这里被getSupportFragmentManager() 调用:

adapter = new ViewPagerAdapter(getSupportFragmentManager());

【问题讨论】:

    标签: android android-fragments android-viewpager adapter


    【解决方案1】:

    我能想到一个问题。在父 viewpager 上调用 setOffscreenPageLimit(limit)。

    这里 limit 是在空闲状态下应该保留到视图层次结构中当前页面任一侧的页面数。超出此限制的页面将在需要时从适配器重新创建。因此,请根据您的用例设置适当的限制。

    viewPager = (ViewPager) findViewById(R.id.pager);
    viewPager.setAdapter(new MyAdapter(fragmentManager));
    viewPager.setOffscreenPageLimit(2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多