2012-06-16 25 views
24

Sto cercando di familiarizzare con ViewPager. Il mio codice è riportato di seguito. Il problema è che i metodi onPageChangeListener non vengono chiamati. Quale può essere il problema?onPageScrolled() non viene chiamato

public class TabsViewPagerFragmentActivity extends SherlockFragmentActivity implements ViewPager.OnPageChangeListener { 


private ViewPager mViewPager; 
private PagerAdapter mPagerAdapter; 
private PageIndicator mIndicator; 

private static final String[] CONTENT = new String[] { "Home", "Popular", "Chat", "Profile"}; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ActionBar bar = getSupportActionBar(); 

    View customview = LayoutInflater.from(this).inflate(R.layout.actionbar_custom_layout, null); 

    ImageView im = (ImageView)customview.findViewById(R.id.add); 

    /*im.getLayoutParams().height = h; 
    im.getLayoutParams().width = h;*/ 

    bar.setCustomView(customview); 
    bar.setDisplayShowCustomEnabled(true); 
    bar.setDisplayShowTitleEnabled(false); 
    bar.setDisplayShowHomeEnabled(false); 
    // Inflate the layout 
    setContentView(R.layout.tabs_viewpager_layout); 


    // Intialise ViewPager 
    this.intialiseViewPager(); 

    mIndicator = (TitlePageIndicator)findViewById(R.id.titles); 
    mIndicator.setViewPager(mViewPager); 

    TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.titles); 

    indicator.setTextColor(0xAAfb891e); 
    indicator.setSelectedColor(0xFFfb891e); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 


    menu.add("Search") 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 


    return true; 
} 



public int getCount() { 
    return CONTENT.length; 
} 


protected void onSaveInstanceState(Bundle outState) { 

    super.onSaveInstanceState(outState); 
} 
private void intialiseViewPager() { 


    this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(), 
              fragments); 

    this.mViewPager = (ViewPager)super.findViewById(R.id.viewpager); 
    this.mViewPager.setAdapter(this.mPagerAdapter); 
    this.mViewPager.setOnPageChangeListener(this); 



} 

public void onPageScrolled(int position, float positionOffset, 
     int positionOffsetPixels) { 
    // TODO Auto-generated method stub 

    System.out.println(positionOffsetPixels); 

} 

public void onPageSelected(int position) { 
    // TODO Auto-generated method stub 

    System.out.println(position); 
} 


public void onPageScrollStateChanged(int state) { 
    // TODO Auto-generated method stub 

    System.out.println(state); 

} 
} 

Ciò che intendo è che non ottengo nulla di stampato nel Logcat sullo scorrimento delle mie pagine.

+0

è possibile inserire il codice in cui si sta definendo mIndicator? – FoamyGuy

+0

che cosa è mIndicator –

+0

Spiacente che mIndicator sia il viewpagerindicator ... this.mViewPager.setOnPageChangeListener (mIndicator); in realtà era inizialmente this.mViewPager.setOnPageChangeListener (this); Sono cambiato solo per vedere cosa è successo ma non ha aiutato ... – ProgrAmmar

risposta

119

Bene, ho risolto il problema da solo dopo un errore di prova.

Poiché stavo introducendo un "identificatore" TitlePagerIndicator, ho dovuto chiamare mIndicator.setOnPageChangeListener (this); e non mViewPager.setOnPageChangeListener (this);

+5

Grazie. Mi salva la testa. Ma potresti dirmi la ragione per favore? –

+9

Immagino che l'OP stia usando qualcosa come http://viewpagerindicator.com/ che imposta internamente 'onPageChangeListener' e quindi qualsiasi impostazione impostata a livello di codice sarà dereferenziata – Dori

+0

SI, FINALMENTE. Sto usando viewpagerindicator lib e il listener deve essere collegato all'indicatore e non al viewpager. Grazie! – Roberto

0

Il modo in cui hai scritto il tuo codice credo si implementa ViewPager.OnPageChangeListener

Change

this.mViewPager.setOnPageChangeListener(mIndicator);

Per

this.mViewPager.setOnPageChangeListener(this);

+0

In realtà era solo "questo", l'avevo appena cambiato per vedere gli effetti. Ma in ogni caso, cambiare mIndicator a questo non ha aiutato. – ProgrAmmar

+0

pubblica qui il tuo intero codice sorgente. –

+0

Ho modificato la mia domanda con il codice completo. – ProgrAmmar

2

Il flusso System.out non stampa a Logcat . Utilizzare invece la classe Log come Log.d("MyApp","message").

+0

Ho usato System.out.println() in precedenza per stampare valori dinamici nel logcat prima. Ma poi troppo male provalo. – ProgrAmmar

0

Ho seguito i suggerimenti ragazzi sopra, ma non ha funzionato per me. Nel mio caso, ho usato: mIndicator.setCurrentItem(position);

Questo può aiutare qualcuno!

Problemi correlati