【问题标题】:Fragments in ViewPager not loaded when the containing Fragment is recreated重新创建包含的 Fragment 时未加载 ViewPager 中的 Fragment
【发布时间】:2014-09-12 20:37:40
【问题描述】:

我有一个 Fragment MyFragment 和一个包含更多 FragmentViewPager。它在我第一次加载 MyFragment 时工作正常,但如果我返回并重新创建它,ViewPager 中的 Fragments 不会显示,因为方法 FragmentPagerAdapter.getItem 没有被调用。

我正在使用

怎么了?

import android.app.Fragment;
import android.app.FragmentManager;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
...

public class MyFragment extends Fragment {

    private ViewPager pager;
    private MyPagerAdapter adapter;

    private List<Fragment> fragmentList = new ArrayList<Fragment>();

    public MyFragment() {}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                 Bundle savedInstanceState) {
        return inflater.inflate(R.layout.my_fragment_layout, container, false);
    }

    public void onViewCreated(View v, Bundle savedInstanceState) {
        super.onViewCreated(v, savedInstanceState);

        indicators = (PagerSlidingIndicator) v.findViewById(R.id.indicators);
        pager = (ViewPager) v.findViewById(R.id.pager);

        Fragment fragment1 = new Fragment1();
        fragmentList.add(fragment1);

        Fragment fragment2 = new Fragment2();
        fragmentList.add(fragment2);

        Fragment fragment3 = new Fragment3();
        fragmentList.add(fragment3);

        adapter = new IndicatorPagerAdapter(getFragmentManager());
        pager.setAdapter(adapter);
    }

    public class MyPagerAdapter extends FragmentPagerAdapter {

        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return fragmentList.size();
        }

        @Override
        public Fragment getItem(int position) {
            return fragmentList.get(position);
        }
    }
}

【问题讨论】:

    标签: android android-fragments android-viewpager fragmentpageradapter


    【解决方案1】:

    如果您使用嵌套片段(“我有一个片段 MyFragment 和一个包含更多片段的 ViewPager”),则在设置您的 FragmentPagerAdapter 时,您需要使用getChildFragmentManager(),而不是getFragmentManager()

    【讨论】:

    • getChildFragmentManager():调用需要 API 级别 17,我有 min=15。所以唯一的办法就是使用支持Fragment,对吧?
    • 是的,可悲的事实是我必须用支持 Fragment 替换我的所有 Fragment 才能使用 getChildFragmentManager()
    • @jul:是的,嵌套片段的概念仅被添加到 API 级别 17 中片段的本机实现中。您的选择是要么不让 ViewPager 出现在片段中有片段作为ViewPager 的页面。
    • @CommonsWare 我有类似的问题,但我的 ViewPager 被包装在一个以片段为页面的活动中。有没有办法让它像那样工作,或者我必须将 viewpager 包装在一个片段中(例如,它将 activity->fragment->viewpager->fragments 作为 viewpager 中的页面)?我的问题是here,如果您检查一下,将不胜感激!谢谢。
    • 已经一周了,我正在寻找解决这个问题的方法,谢谢
    猜你喜欢
    • 2017-04-07
    • 2013-04-22
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多