我已经附加了FragmentStatePagerAdapter的ViewPager。每个孩子都是片段。每当我从页面滚动或关闭时,我都需要调用几种方法。这就是我到目前为止所做的:
mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
int mCurrentPosition = -1;
@Override
public void onPageSelected(int newPosition) {
super.onPageSelected(newPosition);
FullScreenAssetFragment newPage = (FullScreenAssetFragment) mAdapter.getItem(newPosition);
newPage.onFragmentScrolledIn();
if (mCurrentPosition >= 0) {
FullScreenAssetFragment oldPage = (FullScreenAssetFragment) mAdapter.getItem(mCurrentPosition);
oldPage.onFragmentScrolledOff();
}
mCurrentPosition = newPosition;
}
});
然后在每个片段中我实现了这些方法:
/**
* Called when this Fragment is hidden from the ViewPager, because we scrolled off to another
* page.
*/
public void onFragmentScrolledOff() {
if (mVideoView != null && mVideoView.isPlaying()) {
mVideoView.stopPlayback();
}
if (mMediaController != null) {
mMediaController.setVisibility(View.GONE);
}
}
/**
* Called when this Fragment is shown in the ViewPager
*/
public void onFragmentScrolledIn() {
if (mVideoView != null && !mVideoView.isPlaying()) {
mVideoView.start();
}
if (mMediaController != null) {
mMediaController.setVisibility(View.VISIBLE);
}
}
正如您可能猜到的,问题在于我的每个片段中都有一个VieoView,我在其中显示视频,我想在滚动到另一个页面时停止这些视频。但这不是主要观点,我可能会因其他原因检测滚动更改。因此任何特定的视频相关解决方案都没有用。我想要的是在执行Fragment的onViewCreated方法之后调用onFragmentScrolledOff / onFragmentScrolledIn上的那些方法。碰巧我有一个我通过Fragment的Bundle设置的变量,当我执行onFragmentScrolledIn方法时,变量为null,这意味着onViewCreated方法还没有被调用。我希望在调用onFragmentScrolledOff / onFragmentScrolledIn方法时,100%确定之前已经调用了onViewCreated方法。
关于如何实现这一目标的任何建议?
答案 0 :(得分:0)
在FragmentStatePagerAdapter类中覆盖getItemPosition
方法,返回PagerAdapter.POSITION_NONE。在片段onFragmentScrolledIn()
上拨打onCreateView
,在片段onFragmentScrolledOff()
方法上拨打onDetach()
。