metemet06 metemet06 - 1 month ago 8
Android Question

onPageSelected doesn't work for first page

My pager adapter ( extends PagerAdepter ) has a textview in it. And I update this textview with MainActivity's onPageSelected . Its update textview for position > 0 , but start page (position 0) doesn't update on startup. When I swipe forward then swipe back; it sets value for position 0 BUT I couldnt set value ON START. How can set value for star page ?

public void onPageSelected(int position) {

switch (position) {
case 0:

PagerAdapter.tv.setText("value"); // => doesnt work on start

break;

default:
PagerAdapter.tv.setText("value");
break;
}
}


Full Code:

public class QuizStart extends SlidingFragmentActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

this.setContentView(R.layout.activity_main);

mPager = (ViewPager)findViewById(R.id.pager);
QuestionPagerAdapter mAdapter = new QuestionPagerAdapter();

mPager.setAdapter(mAdapter);
QuizStart.onPageSelected(0);

mPager.setOnPageChangeListener(new OnPageChangeListener() {


@Override
public void onPageScrollStateChanged(int arg0) { }

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) { }

@Override
public void onPageSelected(int position) {

switch (position) {
case 0:

PagerAdapter.tv.setText("value"); // => doesnt work on start

break;

default:
PagerAdapter.tv.setText("value");
break;
}
}

});
}
}

Answer

You can manually call onPageSelected(0) when you create your OnPageChangeListener to set the starting state:

OnPageChangeListener pageChangeListener = new OnPageChangeListener() {
    @Override
    public void onPageScrollStateChanged(int arg0) { }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) { }

    @Override
    public void onPageSelected(int position) {

        switch (position) {
        case 0: 
            QuizStart.next.setText(getmycurrentpage()+"");
            break;

        default:

            QuizStart.next.setText(getmycurrentpage()+"");
            break;
        }
    }
});

   mPager.setOnPageChangeListener(pageChangeListener);
   // do this in a runnable to make sure the viewPager's views are already instantiated before triggering the onPageSelected call
   mPager.post(new Runnable()
   {
       @Override
       public void run() 
       {
           pageChangeListener .onPageSelected(viewPager.getCurrentItem());
       }
   });

Edit

Now it will not get Null Pointer exception as pointed by @metemet06