2015-01-27 19 views
5

Tôi đang sử dụng máy nhắn tin trượt dải tab: https://github.com/astuetz/PagerSlidingTabStrip/ViewPager của không di chuyển

Với dòng sau:

 @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> 

Tất cả mọi thứ đang làm việc tốt với ít trên code.But tôi cần phải lắng nghe những thay đổi tab, cho đạt được điều này tôi đã thay đổi phương pháp onCreate của tôi như thế này:

@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); 
      } 
    }); 
    } 

Với mã này mã của tôi đang làm việc nhưng tab chỉ báo không di chuyển.

Bạn có thể nhìn thấy nó ở đây:

enter image description here

Tôi đang ở tab chat nhưng chỉ số vẫn còn nằm trên những người sử dụng tab.How tôi có thể sửa lỗi này? Nếu tôi không sử dụng setOnPageChangeListener nó đang di chuyển.

+0

Vẫn không hoạt động đối với tôi. Bất kỳ giải pháp nào khác. Thư viện này hút! –

Trả lời

8

vấn đề là pager.setOnPageChangeListener(new OnPageChangeListener()) vì chính các tab được đặt là OnPageChangeListener.

Do đó tabs.setOnPageChangeListener(new OnPageChangeListener() ...)

+0

Nó làm việc cho tôi, cảm ơn! Một giải pháp đơn giản và hiệu quả –

2

Khi bạn gọi setOnPageChangeListener bạn đang ghi đè lên một trong những bộ bởi các thư viện PagerSlidingTabStrip đó là lý do tại sao nó không được cập nhật chỉ số với sự thay đổi tab. Các PagerSlidingTabStrip nên vạch trần một phương pháp để bạn có thể nghe các thay đổi tab, tôi hy vọng nó đã tồn tại vì nó trông rất giống với mã ví dụ chính thức.

0

Guys tôi bị tấn công cùng một vấn đề, chỉ báo không di chuyển với ViewPager. Tìm kiếm trên Internet và cuối cùng tôi thấy sai lầm của tôi: Tôi đã sử dụng

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) { 

      } 
     }); 

nhưng chúng ta phải sử dụng nghe này cho Indicator, vì vậy tôi lấy ra nghe điều này từ ViewPager và sử dụng người nghe với PageIndicator định nghĩa của tôi như dưới đây : và nó hoạt động tốt.

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) { 

      } 
     }); 
Các vấn đề liên quan