ViewPager的onPageSelected从未被调用

8

我需要实现 setOnPageChangeListener,因为如果第一个片段显示给用户,我需要从 ActionBar 中隐藏某些 item

我的简单代码:

    viewPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int page) { //never called
            // TODO Auto-generated method stub
            if(page == 0)
            {
                isSearch = false;
            }
            else
            {
                isSearch = true;
            }
            supportInvalidateOptionsMenu();
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub

        }
    });
viewPager.setCurrentItem(0); //not working

如果第一个片段显示(page == 0),则isSearch应该为false,但是当我调试它时,onPageSelected从未被调用。
请帮我看一下,感谢您的帮助。
注意:我的适配器没有实现OnPageChangeListener。或者我应该实现它吗?这是必须的吗?

你设置了适配器吗? - Goran Horia Mihail
@GoranHoriaMihail 是的,我也尝试过在之前和之后设置它...但没有效果。 - Blaze Tama
1
你正在使用PageIndicator吗?那么请查看这个链接:https://dev59.com/Z2cs5IYBdhLWcg3wlFA2#12733282 - SweetWisher ツ
@SweetWisherツ 非常感谢!请回答我的问题,这样我就可以接受它 :) - Blaze Tama
1个回答

21

如果您将PageIndicator与Viewpager一起使用,则ViewPager的onPageChangeListener不会被调用。您应该将页面更改侦听器设置为PageIndicator,当页面更改时它将被调用。

indicator.setOnPageChangeListener(new OnPageChangeListener() {

    @Override
    public void onPageSelected(int page) {
        if(page == 0)
        {
            isSearch = false;
        }
        else
        {
            isSearch = true;
        }
        supportInvalidateOptionsMenu();
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }
});

希望这可以帮助你 ツ


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接