恢复时不恢复ViewPager中的片段视图

Mar*_*kus 32 android android-fragments android-tabs

我有ActionBar Tabs设置.它由4个标签组成.一切都很好,直到我离开TabbedFragment并返回.

我创建这样的标签:

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final ActionBar actionBar = getActionBar();

        tabs = Lists.newArrayList();
        tabs.add(new TabDefinition<>("Tab 1"));
        tabs.add(new TabDefinition<>("Tab 2"));
        tabs.add(new TabDefinition<>("Tab 3"));
        tabs.add(new TabDefinition<>("Tab 4"));


        for (TabDefinition tab : tabs) {
            actionBar.addTab(actionBar.newTab()
                .setText(tab.text)
                .setTag(tab.tag)
                .setTabListener(this));
        }
    }
Run Code Online (Sandbox Code Playgroud)

并初始化适配器,如下所示:

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

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    viewPager = (ViewPager) view.findViewById(R.id.pager);

    viewPager.setAdapter(new FragmentStatePagerAdapter(getFragmentManager()) {

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

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

    viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            getActionBar().setSelectedNavigationItem(position);
        }
    });

    viewPager.setCurrentItem(getActionBar().getSelectedNavigationIndex(), true);
}
Run Code Online (Sandbox Code Playgroud)

当返回到TabbedFragment选定的选项卡时,它旁边的1将没有任何内容.只是空视图.但是,如果我选择当前+ 2片段内容加载.然后返回到第一个片段内容重新加载.
例如,我有A,B,C,D标签.在离开之前TabbedFragment我选择了标签A.当TabbedFragment我回到我仍然在标签A时,它是空的.标签B也是如此.
但是当选择标签C时,它就会被创建和加载.返回选项卡A,重新创建.

这可能是什么问题?

Mar*_*kus 72

一段时间后又遇到了同样的问题,所以更新这个问题.如果您正在使用FragmentStatePagerAdapter,则应提供FragmentManagervia getChildFragmentManager()而不是getFragmentManager().参见问题55068:ViewPager不刷新子片段时,通过堆栈中后退导航

  • 这对支持v4 FragmentManager有什么作用? (5认同)