Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检测碎片StatePageRadapter';s片段子调用onViewCreated方法_Android_Android Fragments_Android Viewpager_Fragmentstatepageradapter - Fatal编程技术网

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的地方使用了这个片段。