我有一个底部标签的活动,我用它来切换片段。其中一个选项卡具有ViewPager
设置的片段(带有3个选项卡)。 ViewPager
有RecyclerView
,当我点击任何项目时,新片段应该替换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();
答案 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();