[英]I am trying to implement a TitlePageIndicator and a CirclePageIndicator on the same ViewPager
我正在尝试实现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-我在这里发现一个重复的问题,但没有给出答案。
为了解决此问题,您应该手动调用第一个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);
}
};
问题是指示器将其自身设置为viewPager的onPageChangedlistener以便更新自身。 如果实例化两个指示器,则只有第二个指示器将收到通知(因为ViewPager一次只能有一个侦听器)。 您应该稍微修改指标的代码,以将第二个页面指标设置为第一个指标的侦听器。 那时,您将监听器设置为第二个指示器的监听器。 希望它足够清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.