Android ViewPager片段替换

时间:2018-01-24 13:25:01

标签: android android-fragments android-viewpager

我有一个底部标签的活动,我用它来切换片段。其中一个选项卡具有ViewPager设置的片段(带有3个选项卡)。 ViewPagerRecyclerView,当我点击任何项目时,新片段应该替换ViewPager存在的片段。 但是在尝试替换片段时收到错误No view found for id R.id.frame_layout_content for fragment IndexFragment。在这种情况下如何正确替换片段?

代码流程:

活动 - >用R.id.frame_layout_content替换ViewPagerFragment中的片段 - >使用片段适配器(3个标签)设置ViewPager - >点击RecyclerView中的IndexFragment项,将R.id.frame_layout_content中的片段替换为IndexDetailsFragment

ViewPagerFragment:

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    mViewPager = (ViewPager) view.findViewById(R.id.pager);
    ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());

    adapter.addFragment(new IndexFragment(), view.getResources().getString(R.string.title_index));
    adapter.addFragment(new FaqFragment(), view.getResources().getString(R.string.title_faq));
    adapter.addFragment(new QuotesFragment(), view.getResources().getString(R.string.title_cquotes));

    mViewPager.setAdapter(adapter);

    tabLayout = (TabLayout) view.findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);

    super.onViewCreated(view, savedInstanceState);
}

IndexFragment更改片段的代码:

IndexDetailsFragment newFragment = new IndexDetailsFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);
transaction.replace(R.id.frame_layout_content, newFragment);
transaction.addToBackStack(null);
transaction.commit();

3 个答案:

答案 0 :(得分:1)

尝试更改

IndexFragment newFragment = new IndexFragment();

Fragment newFragment = new IndexFragment();

希望它有所帮助。

答案 1 :(得分:1)

R.id.frame_layout_content位于MainActivity内,因此IndexFragment将无法访问它。

您应该创建一个界面,因此IndexFragment可以通知MainActivity,然后MainActivity应该更改R.id.frame_layout_content内容。

答案 2 :(得分:0)

当我在FragmentTransaction transaction = getFragmentManager().beginTransaction()中呼叫IndexFragment时(替换为FragmentManager附加的ViewPager),我收到一个附加到ViewPager的实例,而不是活动,有R.id.frame_layout_content

因此解决方案是从父FragmentManager获取Activity实例:

FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
相关问题