Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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;                 }             }          }); } } 
like image 918
metemet06 Avatar asked Apr 18 '13 03:04

metemet06


2 Answers

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

like image 115
ianhanniballake Avatar answered Sep 22 '22 03:09

ianhanniballake


For me work next code

    viewPager.addOnPageChangeListener(myOnPageChangeListener); 

.

    ViewPager.OnPageChangeListener myOnPageChangeListener = new ViewPager.OnPageChangeListener() {      //declare key     Boolean first = true;      @Override     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {         if (first && positionOffset == 0 && positionOffsetPixels == 0){             onPageSelected(0);             first = false;         }     }      @Override     public void onPageSelected(int position) {         //do what need     }      @Override     public void onPageScrollStateChanged(int state) {     } }; 
like image 39
Игорь Березовский Avatar answered Sep 20 '22 03:09

Игорь Березовский