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; } } }); } }
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
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) { } };
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With