Android ViewPager中的视图';s片段为空

Android ViewPager中的视图';s片段为空,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我有一个MainActivity,它包含经典的抽屉布局,在这里单击抽屉项并将一个片段加载到主容器中。在应用加载时,我的“MapFragment”被加载到容器中。此片段包含一个底部页,其中包含一个ViewPager,它有2个片段 如果我加载该应用程序,并通过单击抽屉项目导航到MapFragment之外,比如说“SupportFragment”,则该片段将加载到容器中。如果随后导航回MapFragment,则底部工作表ViewPager中包含的片段中的所有视图现在都为空 澄清一下,ViewPager

我有一个MainActivity,它包含经典的抽屉布局,在这里单击抽屉项并将一个片段加载到主容器中。在应用加载时,我的“MapFragment”被加载到容器中。此片段包含一个底部页,其中包含一个
ViewPager
,它有2个片段

如果我加载该应用程序,并通过单击抽屉项目导航到MapFragment之外,比如说“SupportFragment”,则该片段将加载到容器中。如果随后导航回MapFragment,则底部工作表
ViewPager
中包含的片段中的所有视图现在都为空

澄清一下,
ViewPager
中的片段不是空的,但它们的所有视图都是空的

当前,使用以下代码在MapFragment的
onCreate()
中设置ViewPager:

mBottomSheetViewPagerAdapter = new BottomSheetViewPagerAdapter(((MainActivity)getActivity()).getSupportFragmentManager());
mFirstFragment = new FirstFragment();

mFirstFragment.setListener(new FirstFragmentListener() {
    //...listeners
});
mSecondFragment = new SecondFragment();
mSecondFragment.setListener(new SecondFragmentListener() {
    //...listeners
});

mBottomSheetViewPagerAdapter.add(mFirstFragment);
mBottomSheetViewPagerAdapter.add(mSecondFragment);

mViewPager.setAdapter(mBottomSheetViewPagerAdapter);
mTabLayout.setupWithViewPager(mViewPager);
为什么这些视图可能是空的

编辑:所以我发现了一些非常有趣的东西。我向父“MapFragment”和
ViewPager中的一个片段(“FirstFragment”)的生命周期方法添加了日志语句。我注意到,在第一次启动MapFragment时,我会看到它的生命周期方法被打印出来,然后是位于
ViewPager
中的子片段的方法。当我导航离开时,将调用MapFragment的
onPause()
onStop()
,但在
ViewPager
中没有从子片段打印任何内容。然后,当我通过单击抽屉中的MapFragment选项导航回MapFragment时,我看到了MapFragment中的启动生命周期方法,但在
ViewPager
中没有看到子片段

如果我重构
ViewPager
中的子片段,以使用本机片段而不是支持片段,然后
ViewPager
适配器从FragmentPagerAdapter的v13版本扩展,然后在实例化适配器时传入
getChildFragmentManager
mBottomSheetViewPagerAdapter=new BottomSheetViewPagerAdapter(getChildFragmentManager())

这有一个有趣的效果,即运行
ViewPager
中的子片段缺少生命周期方法,因此打印了相应的日志语句。为了说明所有这些,以下是启动应用程序、导航到其他片段,然后导航回原始片段时打印到logcat的内容摘要:

支持片段:

带有本机片段


但是,即使在第二次显式地看到子片段onCreateView()被调用时,如果我尝试访问任何视图(在本例中,调用一个在
EditText
上调用
setFocusable()
的方法),我也会得到一个NPE,因为它们不是initialized@LunarWatcher你能详细说明一下吗?它们在第一次加载“MapFragment”时初始化得很好。从我在代码片段中看到的情况来看,mViewPager和mTabLayout从未初始化过。它们通过Butterknife.oh绑定在类的顶部。没关系,因为他们不是initialized@LunarWatcher你能详细说明一下吗?它们在第一次加载“MapFragment”时初始化得很好。从我在代码片段中看到的情况来看,mViewPager和mTabLayout从未初始化过。它们通过Butterknife.oh绑定在类的顶部。那没关系
//App launched, default MapFragment loaded
MapFragment onCreate() 
MapFragment onCreateView()
MapFragment onStart() 
MapFragment onResume() 
FirstFragment onCreate() called
FirstFragment onCreateView() called.
FirstFragment onStart() called.
FirstFragment onResume() called.

//Navigate to another fragment
MapFragment onPause() 
MapFragment onStop() 

//Use the drawer to navigate back to the MapFragment
MapFragment onCreateView()
MapFragment onStart() 
MapFragment onResume() 
//App launched, default MapFragment loaded
MapFragment onCreate() 
MapFragment onCreateView()
MapFragment onStart() 
MapFragment onResume() 
FirstFragment onCreate() called
FirstFragment onCreateView() called.
FirstFragment onStart() called.
FirstFragment onResume() called.

//Navigate to another fragment
FirstFragment onPause() called.
MapFragment onPause() 
FirstFragment onStop() called
MapFragment onStop() 

//Use the drawer to navigate back to the MapFragment
MapFragment onCreateView()
FirstFragment onCreateView() called.
MapFragment onStart() 
FirstFragment onStart() called.
MapFragment onResume() 
FirstFragment onResume() called.