我试图在同一个ViewPager上实现TitlePageIndicator和CirclePageIndicator

时间:2014-01-24 07:14:43

标签: android android-viewpager

我正在尝试实现TitlePageIndicator和CirclePageIndicator来创建这样的东西:

enter image description here

这是我的代码:

    pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
    ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
    pager.setAdapter(pageAdapter);

    TitlePageIndicator mWordIndicator = (TitlePageIndicator)findViewById(R.id.word_indicator);
    mWordIndicator.setViewPager(pager);
    mWordIndicator.setOnPageChangeListener(pageListener);

    CirclePageIndicator indicator = (CirclePageIndicator) findViewById(R.id.indicator);
    indicator.setViewPager(pager);
    indicator.setOnPageChangeListener(pageListener);

OnPageChangeListener pageListener = new OnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        // TODO Auto-generated method stub
        on_page_selected = position;
        titleText.setText(pageTitle.get(position));
        setPageImages();

    }

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

    }

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

    }
};

问题是一次只能运行一个指标。如果我评论一个,另一个工作。如果我将两个都取消注释,只有CirclePageIndicator工作。您对我如何实现这一目标有什么建议吗?或者是否有另一个我可以用来实现目标的图书馆?提前谢谢!

PS - 我发现了一个重复的问题here,但没有给出答案。

2 个答案:

答案 0 :(得分:4)

为了解决这个问题,你应该手动调用第一个PageIndicator的OnPageChangeListener回调函数。喜欢:

pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
pager.setAdapter(pageAdapter);

CirclePageIndicator indicator = (CirclePageIndicator) findViewById(R.id.indicator);
indicator.setViewPager(pager);


TitlePageIndicator mWordIndicator = (TitlePageIndicator)findViewById(R.id.word_indicator);
mWordIndicator.setViewPager(pager);
mWordIndicator.setOnPageChangeListener(pageListener);



OnPageChangeListener pageListener = new OnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        // TODO Auto-generated method stub
        on_page_selected = position;
        titleText.setText(pageTitle.get(position));
        setPageImages();

        indicator.onPageSelected(position);

    }

    @Override
    public void onPageScrolled(int position, float arg1, int arg2) {
        // TODO Auto-generated method stub
        indicator.onPageScrolled(position, arg1, arg2);
    }

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

        indicator.onPageScrollStateChanged(arg0);
    }
};

答案 1 :(得分:0)

问题是指针将自己设置为viewPager的onPageChangedlistener以便更新自身。 如果您实例化两个指标,那么只有第二个会收到通知(因为ViewPager一次只能有一个监听器)。 您应该修改指示器的代码,以便让第二页指示器将自己设置为第一个指示器的监听器。 此时,您将侦听器设置为第二个指示器的侦听器。 希望它足够清楚。