android - ViewPager fragment 中的 onPause() 不起作用

标签 android android-fragments android-viewpager android-lifecycle android-tablayout

我有一个问题: 我将 ViewPager+ TabLayout 与 NavigationView 一起使用 我从 fragment 中调用 ViewPager。

我的问题:未调用子 fragment 中的 onPause() 方法。 当应用程序启动时,所有方法(onStart()、onActivityCreated())都会被触发。 当销毁应用程序时,这些方法仅在我调用 ViewPager 的 fragment 中起作用,在子 fragment 中,onPause()、onStope() 不起作用。 我认为问题在于父 fragment 的破坏发生得比子 fragment 快。

这是我调用 ViewPager 的 fragment 的代码。

  @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.fr_four, container, false);

    TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabs);
    tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
    tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

    final ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager);
    final PagerAdapter adapter = new PagerAdapter
            (getActivity().getSupportFragmentManager(), tabLayout.getTabCount());
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });


    Toast.makeText(getActivity(), "FragmentFour.onCreateView()",
            Toast.LENGTH_SHORT).show();
    Log.d("FragmentFour", "onCreateView");

    return view;
}


    public class PagerAdapter extends FragmentStatePagerAdapter {
    int mNumOfTabs;

    public PagerAdapter(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                FragmentFourOne tab1 = new FragmentFourOne();
                return tab1;
            case 1:
                FragmentFourTwo tab2 = new FragmentFourTwo();
                return tab2;
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}

如何解决? 我很乐意提供任何帮助。 谢谢。

最佳答案

经过这么多天,我找到了答案。 如果将 getActivity().getSupportFragmentManager() 替换为 getChildFragmentManager(),一切正常。

这是最终代码

viewPager = (ViewPager) view.findViewById(R.id.viewpager);
adapter = new PagerAdapter(getChildFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

关于android - ViewPager fragment 中的 onPause() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50136208/

相关文章:

java - Android应用程序登录抽屉导航无法点击 fragment

java - 如何检查 fragment 在 Activity OnBackpressed 中是否可见

android - ViewPager 中使用的 Fragment 内的 ListView 的行为与预期不符

android - ViewPager + PagerSlidingTabStrip : Navigating from a tab immediately without displaying contents while scrolling

android - 首次创建时无法构建 Bare Expo 应用程序(Expo SDK 42)

安卓支付库

android - 加载程序在源数据更改时不加载数据

android - 即使在设置新适配器后,ViewPager 仍保留 fragment 的实例

java - 使用 Paint 对象在 android 中创建字体和文本样式

java - 找不到 GlideApp