我正在开发一个 Android 应用程序,我的 MainActivity 中有一个 ViewPager,它由 3 个 fragment 组成。 问题如下,当我滑动到第三个 fragment ,然后回到第一个 fragment 时, fragment 1 的 onCreateView 被调用,这是我真正想要的,但是,如果我只滑动到第二个 fragment ,然后返回到第一个,没有调用 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;
}
}
最佳答案
这是 FragmentPagerAdapter
的预期行为.如果 fragment 已经创建并且仍在内存中,则它只是重新附加到 ViewPager。因此,onCreateView(...)
没有被第二次调用的原因。
Implementation of PagerAdapter that represents each page as a Fragment that is persistently kept in the fragment manager as long as the user can return to the page.
您正在使用 FragmentStatePagerAdapter
,它是 FragmentPagerAdapter
的子类,因此它继承了此行为。
通常,在每次页面更改时重新创建 View 不是一个好主意,因为这样做代价高昂并且可能导致滚动不流畅。如果你在 onCreateView(...)
中有一些你想在每次 fragment 更改时再次运行的逻辑,那么我建议查看 ViewPager.OnPageChangeListener
界面。
关于android - 使用 ViewPager 时不会调用 CreateView 上的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46178979/