Android 检测碎片StatePageRadapter';s片段子调用onViewCreated方法
我有一个连着碎纸机的寻呼机。每个孩子都是一个片段。每当我在一个页面上滚动或滚动时,我需要调用几个方法。这就是我目前所做的:Android 检测碎片StatePageRadapter';s片段子调用onViewCreated方法,android,android-fragments,android-viewpager,fragmentstatepageradapter,Android,Android Fragments,Android Viewpager,Fragmentstatepageradapter,我有一个连着碎纸机的寻呼机。每个孩子都是一个片段。每当我在一个页面上滚动或滚动时,我需要调用几个方法。这就是我目前所做的: mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { int mCurrentPosition = -1; @Override public void onPageSelected(int newPosition
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,在其中显示视频,当我滚动到另一个页面时,我想停止这些视频。但这不是重点,我可能想检测其他原因导致的滚动变化。因此,任何特定的视频相关解决方案都是无用的。我想要的是在执行片段的onViewCreated方法之后,调用这些方法onFragmentScrolledOff/onFragmentScrolledIn。碰巧我有一个通过片段的Bundle设置的变量,当我在FragmentScrolledIn中执行方法onFragmentScrolledIn时,该变量为null,这意味着还没有调用onViewCreated方法。我希望在调用onFragmentScrolleOff/onFragmentScrolledIn方法时,100%确保之前已经调用了onViewCreated方法
关于如何实现这一点,有什么建议吗?将FragmentStatePagerAdapter类中的
getItemPosition
方法重写为return PagerAdapter.POSITION\u NONE。在Fragment的onCreateView
上调用onFragmentScrolledIn()
,在Fragment的onDetach()方法上调用onFragmentScrolledOff()
。这是行不通的。我需要在页面被滚动关闭时调用onFragmentScrolledOff(),而不是在调用onDetch()方法时。可以通过许多其他原因调用onDetach()方法,例如,因为我退出了活动/片段。与onFragmentScrolledIn()相同,在创建片段时调用onCreateView方法。如果我有一个8页的ViewPager,偏移量为1,则将调用当前页、上一页和下一页的onFragmentScrolledIn()。您是否尝试过?否。如果我在onCreateView中钩住onFragmentScrolledIn,当我不使用ViewPager时,将调用onFragmentScrolledIn方法事件。我在其他几个没有ViewPager的地方使用了这个片段。