我有一个问题: 我将 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/