我发现了很多类似的问题和许多不同的答案,但没有一个能帮助我。如果有可能的话,我会尝试发一个明确的问题来得到一个明确的答案。
所以我有一个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)下面可见..
任何想法我在这里做错了什么?
答案 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
容器内页碎片。