2015-01-27 17 views
5

sto utilizzando cercapersone scorrevole tabstrip: https://github.com/astuetz/PagerSlidingTabStrip/di Viewpager non si muove

Con righe seguenti:

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

Tutto sta funzionando benissimo con al di sopra code.But ho bisogno di ascoltare i cambiamenti della scheda, per raggiungere questo obiettivo ho cambiato il mio metodo onCreate a questo:

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

Con questo codice il mio codice funziona, ma scheda l'indicatore non si muove.

si può vedere qui:

enter image description here

Sono in scheda chat, ma l'indicatore è ancora sugli utenti tab.How posso risolvere questo problema? Se non utilizzo setOnPageChangeListener è in movimento.

+0

Ancora non funziona per me. Qualsiasi altra soluzione Questa libreria fa schifo! –

risposta

8

il problema è pager.setOnPageChangeListener(new OnPageChangeListener()) perché le schede stesse sono impostate come OnPageChangeListener.

farlo tabs.setOnPageChangeListener(new OnPageChangeListener() ...)

+0

Ha funzionato per me, grazie! Una soluzione così semplice ed efficace –

2

Quando si chiama il gioco è setOnPageChangeListener sovrascrivendo quello impostato dalla libreria PagerSlidingTabStrip è per questo che non viene aggiornato l'indicatore con il cambio scheda. Il PagerSlidingTabStrip dovrebbe esporre un metodo per l'ascolto delle modifiche alle schede, mi aspetto che esista già poiché sembra molto simile al codice di esempio ufficiale.

0

Ragazzi Sono stato colpito dallo stesso problema, l'indicatore non si muoveva con ViewPager. Cercato su internet e alla fine ho trovato il mio errore: stavo usando

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

      } 
     }); 

ma dobbiamo utilizzare questo listener per l'indicatore, quindi ho rimosso questo ascoltatore da ViewPager e usato l'ascoltatore con la mia PageIndicator definito come qui di seguito : e quello ha funzionato bene.

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

      } 
     }); 
Problemi correlati