我正在使用寻呼机滑动标签条: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);
}
});
}
使用此代码,我的代码正在运行,但标签指示器没有移动。
您可以在此处查看:
我在聊天标签中,但指标仍在用户标签上。我该如何解决这个问题?如果我不使用setOnPageChangeListener
,它就会移动。
答案 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))