2015-01-27 9 views
5

Używam pagera przesuwając pasek zakładka: https://github.com/astuetz/PagerSlidingTabStrip/Viewpager nie porusza

z następujących linii:

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

Wszystko działa poprawnie z co powyżej code.But muszę słuchać zmiany zakładce dla achive to zmieniłem metodę onCreate do tego:

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

Z tym kodem mój kod działa, ale na karcie wskaźnik się nie porusza.

Można go zobaczyć tutaj:

enter image description here

Jestem w zakładce czatów, ale wskaźnik ten jest nadal na użytkowników tab.How można to naprawić? Jeśli nie używam setOnPageChangeListener, to się porusza.

+0

Nadal nie działa dla mnie. Każde inne rozwiązanie. Ta biblioteka jest do bani! –

Odpowiedz

8

Problem to pager.setOnPageChangeListener(new OnPageChangeListener()), ponieważ same zakładki są ustawione jako OnPageChangeListener.

Zrób to tabs.setOnPageChangeListener(new OnPageChangeListener() ...)

+0

To zadziałało dla mnie, dzięki! Takie proste i skuteczne rozwiązanie –

2

Po wywołaniu setOnPageChangeListener jesteś nadpisanie jednego zestawu przez bibliotekę PagerSlidingTabStrip dlatego nie aktualizuje wskaźnik ze zmianą karty. PagerSlidingTabStrip powinien narazić metodę, abyś mógł nasłuchiwać zmian tabulatorów. Oczekuję, że już istnieje, ponieważ wygląda bardzo podobnie do oficjalnego kodu przykładowego.

0

Faceci Byłem uderzony z tym samym problemem, wskaźnik nie poruszył się z ViewPager. Szukano w Internecie iw końcu znalazłem mój błąd: używałem

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

      } 
     }); 

ale musimy skorzystać z tej słuchacza dla wskaźnika, więc usunąłem tę słuchacza od ViewPager i używane słuchacza z moim określonym PageIndicator jak poniżej : i to działało dobrze.

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

      } 
     }); 
Powiązane problemy