错误:
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。非常感谢帮助。谢谢!
答案 0 :(得分:3)
您要将ViewPager
个实例保存在onCreate
的本地变量中。你应该把它保存在现场。
你可以
viewPager = vpPager;
添加到onCreate 或者
ViewPager vpPager = (ViewPager) findViewById(R.id.viewpager);
替换为viewPager = (ViewPager) findViewById(R.id.viewpager);
,并将vpPager
的每次使用替换为viewPager
。我建议您尝试真正了解这里的问题。它将帮助您提高编程技能。