我正在尝试实现TitlePageIndicator和CirclePageIndicator来创建这样的东西:
这是我的代码:
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,但没有给出答案。
答案 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一次只能有一个监听器)。 您应该修改指示器的代码,以便让第二页指示器将自己设置为第一个指示器的监听器。 此时,您将侦听器设置为第二个指示器的侦听器。 希望它足够清楚。