我正在开发一个Android应用程序,我的MainActivity中有一个ViewPager,由3个片段组成。 问题如下,当我滑动到第3个片段,然后回到第1个片段时,调用片段1的onCreateView,这是我真正想要的,但是,如果我只转到第2个片段,然后返回到第一个,onCreateView没有被调用! 我需要找到解决这个问题的方法,我花了好几个小时试图找到一个解决方案但却不知道要解决它。 这是与MainActivity中的ViewPager相关的代码
private void setupViewPager(final ViewPager viewPager) {
final ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(new voting(), "ONE");
adapter.addFrag(new dashboard(), "TWO");
adapter.addFrag(new chats(), "THREE");
myAdapter=adapter;
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(0);
}
private class ViewPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<Fragment>();
private final List<String> mFragmentTitleList = new ArrayList<String>();
private ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
Log.i("getItem","getItem");
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
private void addFrag(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
//added newly
@Override
public int getItemPosition(Object object){
return PagerAdapter.POSITION_NONE;
}
@Override
public CharSequence getPageTitle(int position) {
return null;
}
}
答案 0 :(得分:1)
这是FragmentPagerAdapter
的预期行为。如果片段已经创建并且仍在内存中,则它只是重新附加到ViewPager。因此,onCreateView(...)
不再被称为第二次的原因。
PagerAdapter的实现,它将每个页面表示为片段,只要用户可以返回到页面,该片段就会持久保存在片段管理器中。
您使用的FragmentStatePagerAdapter
是FragmentPagerAdapter
的子类,因此它会继承此行为。
通常,在每次更改页面时重新创建视图并不是一个好主意,因为这样做很昂贵并且可能导致非平滑滚动。如果您在onCreateView(...)
中有一些逻辑要在每次更改片段时再次运行,那么我建议您查看ViewPager.OnPageChangedListener
。