Не работает onPause () во фрагменте ViewPager - PullRequest
0 голосов
/ 02 мая 2018

У меня проблема: Я использую ViewPager + TabLayout с NavigationView Я вызываю ViewPager из фрагмента.

Моя проблема: метод onPause () в дочернем фрагменте не вызывается. Когда приложение запускается, все методы (onStart (), onActivityCreated ()) запускаются. При уничтожении приложения методы работают только во фрагменте, в котором я вызываю ViewPager, дочерние фрагменты, onPause (), onStope () не работает. Я думаю, проблема в том, что уничтожение родительского фрагмента происходит быстрее, чем дочернего фрагмента.

Это код моего фрагмента, в котором я вызываю ViewPager.

  @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;
    }
}

Как это исправить? Буду рад любой помощи. Спасибо.

1 Ответ

0 голосов
/ 07 мая 2018

После стольких дней я нашел ответ. Все работает, если 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));
...