OnpageScrolled在Viewpager中工作了两次

时间:2015-04-08 10:41:58

标签: android event-handling android-viewpager

我有ViewPager,其中包含两个不同的片段。 我们假设他们的名字是A和B片段。 其中一个片段具有日期验证过程。当用户尝试从A导航到B时,如果所选日期晚于今天,则ViewPager将返回到片段A(拒绝导航到B)。

这是onPageScrolled提供的,如下所示。

@Override
    public void onPageScrolled( int position, float positionOffset, int positionOffsetPixels ) {

        if ( position == 0 ) {
            if (  positionOffset > 0.5 && getLastCycleDay() > DateHelper.CreateToday( false ) ) {
                mPager.setCurrentItem( 1 );
                SnackbarHelper.newInstance().snackbarshow( IntroActivity.this, resources.getString( R.string.dont_allow_new_cycle ) );
            }

    }

我的问题是onPageScrolled工作两次,当我想运行一个方法时,此方法也可以工作两次。

我该如何预防这种情况?

1 个答案:

答案 0 :(得分:2)

如果连线不止一次,事件将会多次触发。在myPager.setOnPageChangeListener(或addOnPageChangeListener方法,取决于API版本)方法上放置一个断点,该方法连接寻呼机的事件处理程序。检查它为什么被连线两次(如果是)。

鉴于您上面描述的内容,可能存在引用问题,并且事件是针对片段A的不同实例。

尝试在onPageScrolled事件处理程序的第一行代码上放置一个断点,然后使用"评估代码片段"窗口(运行菜单 - >评估表达式),键入并评估“这个”#。检查第一次和第二次激活中ViewPager的实例是否是同一个对象(使用实例ID,在下面圈出):

Instance of ViewPager

如果数字不相同,则表示该片段有两个实例,每个实例都有自己的事件被触发,并且需要检查片段的设置和拆除方式。

如果没有更多代码,很难说。