Android 底部导航片段中有多个选项卡片段

Android 底部导航片段中有多个选项卡片段,android,android-fragments,tabs,tabnavigator,android-bottomnav,Android,Android Fragments,Tabs,Tabnavigator,Android Bottomnav,在底部导航中,有三个选项卡(主页、仪表板、通知)。每个底部导航选项卡都是一个片段。第一个选项卡即主页片段包含另一个顶部导航选项卡,该选项卡有四个选项卡(选项卡1、选项卡2、选项卡3、选项卡4) 问题 当直接从主页选项卡导航到通知选项卡并返回主页选项卡时,选项卡1/以前选择的选项卡(顶部导航选项卡)中的哪个选项卡都不会加载该选项卡的内容 当从选项卡1(主片段选项卡)一直滑动到通知选项卡并向后滑动时,在到达选项卡4时,不会加载选项卡的内容,并且在第一次从选项卡4滑动到选项卡3时,滑动不会进入选项卡

在底部导航中,有三个选项卡(主页、仪表板、通知)。每个底部导航选项卡都是一个片段。第一个选项卡即主页片段包含另一个顶部导航选项卡,该选项卡有四个选项卡(选项卡1、选项卡2、选项卡3、选项卡4)

问题

  • 当直接从主页选项卡导航到通知选项卡并返回主页选项卡时,选项卡1/以前选择的选项卡(顶部导航选项卡)中的哪个选项卡都不会加载该选项卡的内容

  • 当从选项卡1(主片段选项卡)一直滑动到通知选项卡并向后滑动时,在到达选项卡4时,不会加载选项卡的内容,并且在第一次从选项卡4滑动到选项卡3时,滑动不会进入选项卡3。选项卡指示器只需移动一点,第二次轻扫时,它会按预期转到选项卡3

  • 这个应用程序包含很多代码,所以我将把完整的代码链接到

    以下是我的代码供快速参考

    MainActivity.java

    FirstFragment.java(主页)

    问题

  • 代码有什么问题
  • 如何解决这个问题?(布局是一项要求)或者有没有更好的方法从截图中获得布局

  • 实际上,这是一个常见的错误-您在片段内部使用
    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);
    }