Android 当我回来时,viewpager 中的片段是空的
Android fragment empty in viewpager when I come back in
我有一个导航抽屉,其中有一个扩展片段的 ViewPager。当我单击抽屉的项目时,我打开了包含三个片段的 viewpager。它工作得很好。但是,如果我再次单击同一个抽屉项目以再次打开 viewpager,则 viewpager 是空的。我可以看到选项卡,但看不到其中的片段。这是 Viewpager:
public class ViewPagerManager extends Fragment {
public static ViewPagerManager instance = null;
Toolbar toolbar;
public static PagerSlidingTabStrip tabs;
public MyPagerAdapter adapter;
public ViewPager pager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_tabbed, container, false);
instance = this;
adapter = new MyPagerAdapter(getFragmentManager());
pager = (ViewPager)view.findViewById(R.id.pager);
tabs = (PagerSlidingTabStrip)view.findViewById(R.id.tabs);
pager.setAdapter(adapter);
tabs.setViewPager(pager);
pager.setOffscreenPageLimit(3);
adapter.notifyDataSetChanged();
pager.invalidate();
return view;
}
public class MyPagerAdapter extends FragmentPagerAdapter {
private final String[] TITLES = { "One", "Two", "Three" };
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return TITLES[position];
}
@Override
public int getCount() {
return TITLES.length;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
// Top Rated fragment activity
return new FragmentOne();
case 1:
// Games fragment activity
return new FragmentTwo();
case 2:
// Games fragment activity
return new FragmentThree();
}
return null;
}
}
}
正常吗?我该如何解决?如果可以帮助我使用 PagerSlidingTabStrip 库。
当您 return 到片段时,尝试重绘最后选择的页面。我认为 viewpager 没有缓存,你需要重新选择最后一项。您可以覆盖 onresume 方法。
使用此代码
adapter = new MyPagerAdapter(getChildFragmentManager());
而不是
adapter = new MyPagerAdapter(getFragmentManager());
我有一个导航抽屉,其中有一个扩展片段的 ViewPager。当我单击抽屉的项目时,我打开了包含三个片段的 viewpager。它工作得很好。但是,如果我再次单击同一个抽屉项目以再次打开 viewpager,则 viewpager 是空的。我可以看到选项卡,但看不到其中的片段。这是 Viewpager:
public class ViewPagerManager extends Fragment {
public static ViewPagerManager instance = null;
Toolbar toolbar;
public static PagerSlidingTabStrip tabs;
public MyPagerAdapter adapter;
public ViewPager pager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_tabbed, container, false);
instance = this;
adapter = new MyPagerAdapter(getFragmentManager());
pager = (ViewPager)view.findViewById(R.id.pager);
tabs = (PagerSlidingTabStrip)view.findViewById(R.id.tabs);
pager.setAdapter(adapter);
tabs.setViewPager(pager);
pager.setOffscreenPageLimit(3);
adapter.notifyDataSetChanged();
pager.invalidate();
return view;
}
public class MyPagerAdapter extends FragmentPagerAdapter {
private final String[] TITLES = { "One", "Two", "Three" };
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return TITLES[position];
}
@Override
public int getCount() {
return TITLES.length;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
// Top Rated fragment activity
return new FragmentOne();
case 1:
// Games fragment activity
return new FragmentTwo();
case 2:
// Games fragment activity
return new FragmentThree();
}
return null;
}
}
}
正常吗?我该如何解决?如果可以帮助我使用 PagerSlidingTabStrip 库。
当您 return 到片段时,尝试重绘最后选择的页面。我认为 viewpager 没有缓存,你需要重新选择最后一项。您可以覆盖 onresume 方法。
使用此代码
adapter = new MyPagerAdapter(getChildFragmentManager());
而不是
adapter = new MyPagerAdapter(getFragmentManager());