Viewpager的指标没有移动

时间:2015-01-27 22:51:51

标签: android

我正在使用寻呼机滑动标签条:https://github.com/astuetz/PagerSlidingTabStrip/

以下行:

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            pager =  (ViewPager) findViewById(R.id.pager);
            pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
            tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
            tabs.setViewPager(pager);
        }

MyPagerAdapter:

public class MyPagerAdapter extends FragmentPagerAdapter {

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public CharSequence getPageTitle(int position) {
        return (position == 0)? "Users" : "Chats" ;
    }
    @Override
    public int getCount() {
        return 2;
    }
    @Override
    public Fragment getItem(int position) {
        return (position == 0)?  new RandomsFragment() : new ChatsFragment() ;
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
}

XML:

<com.astuetz.PagerSlidingTabStrip
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="48dip"
    app:pstsIndicatorColor="#0B0B16"
    app:pstsShouldExpand="true" />

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tabs">
</android.support.v4.view.ViewPager>

在上面的代码中,一切都运行正常。但是我需要监听标签更改,为了实现这一点,我将onCreate方法更改为:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        pager =  (ViewPager) findViewById(R.id.pager);
        pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
        tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        tabs.setViewPager(pager);
        pager.setOnPageChangeListener(new OnPageChangeListener() {
              public void onPageScrollStateChanged(int state) {}
              public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
              public void onPageSelected(int position) {
                  Log.w("Tab Selected","Position:"+position);
          }
    });
    }

使用此代码,我的代码正在运行,但标签指示器没有移动。

您可以在此处查看:

enter image description here

我在聊天标签中,但指标仍在用户标签上。我该如何解决这个问题?如果我不使用setOnPageChangeListener,它就会移动。

4 个答案:

答案 0 :(得分:8)

问题是pager.setOnPageChangeListener(new OnPageChangeListener()),因为标签本身设置为OnPageChangeListener。

执行tabs.setOnPageChangeListener(new OnPageChangeListener() ... )

答案 1 :(得分:2)

当您致电setOnPageChangeListener时,您将覆盖库PagerSlidingTabStrip设置的那个,这就是为什么它没有更新标签更新指标的原因。 PagerSlidingTabStrip应该公开一种方法供您监听标签更改,我希望它已经存在,因为它看起来与官方示例代码非常相似。

答案 2 :(得分:0)

伙计们我遇到了同样的问题,指标没有与ViewPager一起移动。在互联网上搜索,最后我发现了我的错误: 我正在使用

ViewPager.setOnChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        }); 

但我们必须将此侦听器用于指标,因此我从ViewPager中删除了此侦听器,并将侦听器与我定义的PageIndicator一起使用,如下所示:并且运行正常。

pageIndicator.setAdapter(viewPager);
pageIndicator.setOnChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

答案 3 :(得分:-1)

tabLayout=findViewById(R.id.tablayout) \
viewPager = findViewById(R.id.pager)

viewPager.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tablayout))