如何使用新的片段替换ViewPager中的片段

时间:2017-10-17 09:59:00

标签: android android-fragments fragmenttransaction fragmentstatepageradapter

我发现了很多类似的问题和许多不同的答案,但没有一个能帮助我。如果有可能的话,我会尝试发一个明确的问题来得到一个明确的答案。

所以我有一个Activity,它有一个带有FragmentStatePagerAdapter的ViewPager,包含(现在)只有一个片段(HomeScreenFragment)。

在HomeScreenFragment内部我有一个RecyclerView,其中包含几种不同图标的列表,这些图标应为每个项目点击打开一个不同的片段。

HomeScreenFragment将FrameLayout作为根布局,ID名称为" container"。这是我在这种情况下调用HomeScreenFragment替换MainTypesFragment的方法:

 private void openAllTypesFragment() {
    MainTypesFragment fragment = new MainTypesFragment();
    FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.container, fragment);
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    transaction.addToBackStack(HomeScreenFragment.class.getName());
    transaction.commit();
    eventBus.post(new Event(null, Event.EVENT_FRAGMENT));
}

由于FragmentStatePagerAdapter在MainActivity中初始化,我发送的事件将MainActivity捕获并调用adapter.notifyDataSetChanged();

这样做,没有任何反应..我尝试使用getChildFragmentManager()而不是getActivity()。getSupportFragmentManager(),在这种情况下,先前的片段(HomeScreenFragment)在新的(MainTypesFragment)下面可见..

任何想法我在这里做错了什么?

3 个答案:

答案 0 :(得分:0)

您正在使用的容器是错误的。在活动xml中保留一个容器并使用该容器加载所有碎片。

transaction.replace(R.id.container, fragment);

此处的容器将成为应存在viewpager和其他视图的活动容器。

答案 1 :(得分:0)

您可以尝试我的代码:

ui-loader

在viewpager的片段中:

Fragment

它对我有用,我希望它能帮助你解决问题!

答案 2 :(得分:0)

您需要ViewPager和内部片段(页面)的容器内部活动,用于在页面内打开新片段的容器。

如果你想打开新片段,你应该使用这样的东西 在页面片段

getChildFragmentManager().beginTransaction()
      .replace(R.id.page_fragment_container, fragment)
      .addToBackStack(name)
      .commit()

其中R.id.page_fragment_container容器内页碎片。