popBackStack()

时间:2015-10-07 09:15:44

标签: android

我有一个名为“容器”的布局的活动,其中片段在使用FragmentTransactions时被夸大

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
transaction.replace(R.id.container, SomeFragment.newInstance());
transaction.addToBackStack(null);
transaction.commit();

One Fragment在TabLayout中使用另外两个片段来膨胀另一个片段。这是通过TabLayout和ViewPager完成的。一切顺利,直到我从后台弹出它。

getSupportFragmentManager().popBackStack();

执行此操作时,将重新创建选项卡并调用所有生命周期方法。但是,他们没有内容。它们的布局似乎不会被夸大。

我有一个名为initUI(View v)的方法,在

中调用
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_tabs, container, false);
    initUI(rootView);
    return rootView;
}

它执行TabLayout的设置。

private void initUI(View rootView) {
    pager = (ViewPager) rootView.findViewById(R.id.viewPagerCollected);
    tabLayout = (TabLayout) getActivity().findViewById(R.id.tabs);
    pager.setAdapter(new MyPagerAdapter(getActivity().getSupportFragmentManager()));
    tabLayout.setupWithViewPager(pager);
    tabLayout.setVisibility(View.VISIBLE);
}

同样,调用此方法但在弹出backstack时似乎没有做任何事情。

我在这里做错了什么?为什么即使正在调用onCreateView和initUI,片段也无法正确重新创建?

编辑:在我的TabsFragment中,每个片段都有一个RecyclerView。单击其中一个项目时,将打开另一个片段,向用户显示详细信息。

此处用户可以导航回来。执行此操作时,TabsFragment再次可见,但这次没有任何内容。看起来内部碎片这次没有膨胀。

1 个答案:

答案 0 :(得分:0)

首先像这样添加到后面的堆栈......

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
transaction.replace(R.id.container, SomeFragment.newInstance());
transaction.addToBackStack("YOUR_TAG");
transaction.commit();

之后尝试popstackback()