设置viewPager.setCurrentItem时出现NullPointerException

时间:2016-03-25 03:33:16

标签: java android

错误:

  

java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.support.v4.view.ViewPager.setCurrentItem(int)'                                                                         在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
}

嗨,我正在关注tutorial学习(获取或选择当前页面)。说明我可以通过在 onSaveInstanceState() onRestoreInstanceState()上实现方法来保存和恢复上一个已知选项卡位置,以在屏幕旋转期间保留此数据。

但是我在第68行获得了NPE。非常感谢帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

您要将ViewPager个实例保存在onCreate的本地变量中。你应该把它保存在现场。

你可以

  • viewPager = vpPager;添加到onCreate

或者

  • ViewPager vpPager = (ViewPager) findViewById(R.id.viewpager);替换为viewPager = (ViewPager) findViewById(R.id.viewpager);,并将vpPager的每次使用替换为viewPager

我建议您尝试真正了解这里的问题。它将帮助您提高编程技能。