Android 底部导航片段中有多个选项卡片段
在底部导航中,有三个选项卡(主页、仪表板、通知)。每个底部导航选项卡都是一个片段。第一个选项卡即主页片段包含另一个顶部导航选项卡,该选项卡有四个选项卡(选项卡1、选项卡2、选项卡3、选项卡4) 问题Android 底部导航片段中有多个选项卡片段,android,android-fragments,tabs,tabnavigator,android-bottomnav,Android,Android Fragments,Tabs,Tabnavigator,Android Bottomnav,在底部导航中,有三个选项卡(主页、仪表板、通知)。每个底部导航选项卡都是一个片段。第一个选项卡即主页片段包含另一个顶部导航选项卡,该选项卡有四个选项卡(选项卡1、选项卡2、选项卡3、选项卡4) 问题 当直接从主页选项卡导航到通知选项卡并返回主页选项卡时,选项卡1/以前选择的选项卡(顶部导航选项卡)中的哪个选项卡都不会加载该选项卡的内容 当从选项卡1(主片段选项卡)一直滑动到通知选项卡并向后滑动时,在到达选项卡4时,不会加载选项卡的内容,并且在第一次从选项卡4滑动到选项卡3时,滑动不会进入选项卡
实际上,这是一个常见的错误-您在片段内部使用
FragmentManager
您的活动
,但由于此片段包含另一个子片段片段,您必须使用片段本身的FragmentManager
。因此,修复非常简单-您只需将片段内的getActivity().getSupportFragmentManager()
更改为getChildFragmentManager()
,代码如下:
private void setupViewPager(ViewPager viewPager) {
TabViewPagerAdapter adapter = new TabViewPagerAdapter(getChildFragmentManager());
...
...
viewPager.setAdapter(adapter);
}
这应该可以按预期工作。尝试使用
getChildFragmentManager()
实例getSupportFragmentManager()
@rom4ek你能帮我解决这个问题吗..这个答案非常有价值
public class FirstFragment extends Fragment {
private TabLayout tabLayout;
private ViewPager firstViewPager;
public FirstFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_first, container, false);
firstViewPager = (ViewPager) rootView.findViewById(R.id.viewpager_content);
tabLayout = (TabLayout) rootView.findViewById(R.id.tabs);
tabLayout.setupWithViewPager(firstViewPager);
setupViewPager(firstViewPager);
return rootView;
}
private void setupViewPager(ViewPager viewPager) {
TabViewPagerAdapter adapter = new TabViewPagerAdapter(getActivity().getSupportFragmentManager());
adapter.addFragment(new Tab1Fragment(), "Tab 1");
adapter.addFragment(new Tab1Fragment(), "Tab 2");
adapter.addFragment(new Tab1Fragment(), "Tab 3");
adapter.addFragment(new Tab1Fragment(), "Tab 4");
viewPager.setAdapter(adapter);
}
}
private void setupViewPager(ViewPager viewPager) {
TabViewPagerAdapter adapter = new TabViewPagerAdapter(getChildFragmentManager());
...
...
viewPager.setAdapter(adapter);
}