android - 使用 ViewPager 时不会调用 CreateView 上的 fragment

标签 android android-viewpager fragment fragment-oncreateview

我正在开发一个 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/

相关文章:

android - 带 fragment 的 Tabhost 重新创建 View

android - ViewPager 以编程方式滚动

android - 从 ListFragment 获取菜单

java - Android FragmentActivity 和 Tab 的问题

android - Lint 报告 StringBuilder 影响性能

Android 2d Canvas 游戏: FPS Jitter problem

android - fragment 转换后 AutoCompleteTextView 不起作用

android - 在嵌套 fragment 中使用 OptionsMenu

java - 在 android 中将 contentView 设置为 Web View 后返回到 Activity contentView

android - Retrolambda 与 RealmList