在父查看者页面滑动后,子视图搜索器被破坏/变得不可见

时间:2016-10-16 12:09:08

标签: android android-fragments android-viewpager adapter

我的活动中有一个ViewPager(Parent ViewPager)有4个片段。其中一个片段实现了具有自动滑动的滑动ViewPager(Child 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;
    }
}

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

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

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

adapter = new ViewPagerAdapter(getSupportFragmentManager());

1 个答案:

答案 0 :(得分:0)

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

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

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