Java 设置viewPager.setCurrentItem时出现NullPointerException

Java 设置viewPager.setCurrentItem时出现NullPointerException,java,android,Java,Android,错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.support.v4.view.ViewPager.setCurrentItem(int)” 位于com.example.iswipe.MainActivity.onRestoreInstanceState(MainActivity.java:68) public类MainActivity扩展了AppCompatActivity{ 表格布局; 查看页面查看页面; 碎片页

错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.support.v4.view.ViewPager.setCurrentItem(int)” 位于com.example.iswipe.MainActivity.onRestoreInstanceState(MainActivity.java:68)

public类MainActivity扩展了AppCompatActivity{
表格布局;
查看页面查看页面;
碎片页雷达适配器;
公共静态字符串POSITION=“POSITION”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
ViewPager vpPager=(ViewPager)findViewById(R.id.ViewPager);
AdapterViewPage=新的MyPagerAdapter(getSupportFragmentManager());
设置适配器(AdapterViewPage);
//将视图页导航提供给表格布局
tabLayout=(tabLayout)findViewById(R.id.sliding_tabs);
tabLayout.setTabGravity(tabLayout.GRAVITY\u-FILL);
tabLayout.setTabMode(tabLayout.MODE_固定);
tabLayout.setupWithViewPager(vpPager);
//将页面更改侦听器附加到活动中
vpPager.addOnPageChangeListener(新的ViewPager.OnPageChangeListener(){
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
super.onSaveInstanceState(超出状态);
outState.putInt(位置,tabLayout.getSelectedTabPosition());
}
@凌驾
RestoreInstanceState上的受保护无效(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);

viewPager.setCurrentItem(savedInstanceState.getInt(POSITION));您正在将
viewPager
实例保存在
onCreate
中的局部变量中。您应该将其保存在字段中

你也可以

  • viewPager=vpPager;
    添加到onCreate

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

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

您正在将
ViewPager
实例保存在
onCreate
中的局部变量中。您应该将其保存在字段中

你也可以

  • viewPager=vpPager;
    添加到onCreate

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

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

Thks我发现了问题!在更改变量名称的迷雾中,但我想我错过了那一个。然而,onSaveInstanceState和onRestore…在我按下硬件后退按钮时运行吗?因为它没有如果我按“后退”按钮,snt将返回制表符位置。如果我按“主页”按钮,它将恢复制表符位置。这是一个不同的问题。请查看文档或打开一个新问题。Thks我发现了问题!正在更改变量名称的迷雾中,但我想我错过了那个。然而,onSaveInstanceState和onRestore…(存储…)在我按下“硬件后退”按钮时运行?因为如果我按下“后退”按钮,它不会返回选项卡位置。如果我按下“主页”按钮,它会还原选项卡位置。这是一个不同的问题。请查看文档或打开一个新问题。
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
}