0

Error:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.view.ViewPager.setCurrentItem(int)' on a null object reference at com.example.iswipe.MainActivity.onRestoreInstanceState(MainActivity.java:68)

public class MainActivity extends AppCompatActivity {
TabLayout tabLayout;
ViewPager viewPager;
FragmentPagerAdapter adapterViewPager;

public static String POSITION = "POSITION";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    ViewPager vpPager = (ViewPager) findViewById(R.id.viewpager);
    adapterViewPager = new MyPagerAdapter(getSupportFragmentManager());
    vpPager.setAdapter(adapterViewPager);

    // Give the TabLayout the ViewPager
    tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    tabLayout.setTabMode(TabLayout.MODE_FIXED);
    tabLayout.setupWithViewPager(vpPager);

    // Attach the page change listener inside the activity
    vpPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt(POSITION, tabLayout.getSelectedTabPosition());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    viewPager.setCurrentItem(savedInstanceState.getInt(POSITION)); <----------- LINE 68
}

Hi, I'm following this tutorial to learning (Getting or Selected the Current Page). Stating that I can save and restore the last known tab position by implementing methods on onSaveInstanceState() and onRestoreInstanceState() to persist this data during screen rotation.

But I'm getting NPE on line 68. Help is much appreciated. Thanks!

Zainau
  • 95
  • 4
  • 13

1 Answers1

3

You are saving your ViewPager instance in a local variable in onCreate. You should save it in the field instead.

You can either

  • add viewPager = vpPager; to onCreate

Or

  • replace ViewPager vpPager = (ViewPager) findViewById(R.id.viewpager); with viewPager = (ViewPager) findViewById(R.id.viewpager); and replace every use of vpPager with viewPager.

I recommend that you try to really understand what the problem here is. It will help you to improve your programming skills.

F43nd1r
  • 7,690
  • 3
  • 24
  • 62
  • Thks I found the problem! Was in the mist of changing the variables names but I guess i missed that one out. – Zainau Mar 25 '16 at 03:41
  • However, does onSaveInstanceState and onRestore.... runs when I press the Hardware Back button? Because it doesnt returns the tab position if I press Back button. It does revert the tab position if I press the Home button. – Zainau Mar 25 '16 at 03:44
  • This is a different question. Please look at the documentation or open a new question. http://developer.android.com/reference/android/app/Activity.html – F43nd1r Mar 25 '16 at 03:47