我的活动中有一个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());
答案 0 :(得分:0)
我能想到一个问题。在父viewpager上调用setOffscreenPageLimit(限制)。
此处 limit 是在空闲状态下应保留到视图层次结构中当前页面任一侧的页面数。超出此限制的页面将在需要时从适配器重新创建。因此,请根据您的用例设置适当的限制。
viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(new MyAdapter(fragmentManager));
viewPager.setOffscreenPageLimit(2);