我有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
工作两次,当我想运行一个方法时,此方法也可以工作两次。
我该如何预防这种情况?
答案 0 :(得分:2)
如果连线不止一次,事件将会多次触发。在myPager.setOnPageChangeListener
(或addOnPageChangeListener方法,取决于API版本)方法上放置一个断点,该方法连接寻呼机的事件处理程序。检查它为什么被连线两次(如果是)。
鉴于您上面描述的内容,可能存在引用问题,并且事件是针对片段A的不同实例。
尝试在onPageScrolled事件处理程序的第一行代码上放置一个断点,然后使用"评估代码片段"窗口(运行菜单 - >评估表达式),键入并评估“这个”#。检查第一次和第二次激活中ViewPager的实例是否是同一个对象(使用实例ID,在下面圈出):
如果数字不相同,则表示该片段有两个实例,每个实例都有自己的事件被触发,并且需要检查片段的设置和拆除方式。
如果没有更多代码,很难说。