1

我正在开发一个 Android 应用程序,其中我的 MainActivity 中有一个 ViewPager,由 3 个片段组成。问题如下,当我滑动到第三个片段并返回到第一个片段时,调用片段 1 的 onCreateView 这是我真正想要的,但是,如果我只滑动到第二个片段,然后返回到第一个,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;
    }
}
4

1 回答 1

2

这是使用FragmentPagerAdapter. 如果片段已经创建并且仍在内存中,则它只是重新附加到 ViewPager。onCreateView(...)因此,没有第二次调用的原因。

PagerAdapter 的实现,它将每个页面表示为一个 Fragment,只要用户可以返回该页面,它就会永久保存在 Fragment 管理器中。

您使用的FragmentStatePagerAdapter是 a 的子类FragmentPagerAdapter,因此它继承了此行为。

通常,在每次页面更改时重新创建视图并不是一个好主意,因为这很昂贵并且可能导致不平滑的滚动。如果您有一些逻辑onCreateView(...)想在每个片段更改时再次运行,那么我建议您查看ViewPager.OnPageChangeListener界面。

于 2017-09-12T15:09:09.323 回答