为了账号安全,请及时绑定邮箱和手机立即绑定

可滑动视图空异常错误 - Android Studio

可滑动视图空异常错误 - Android Studio

犯罪嫌疑人X 2022-01-12 16:16:46
当尝试运行应用程序并在视图之间滑动时,应用程序崩溃并出现空对象引用错误。我已经仔细检查了我的 getItem 方法以确保它可以处理这个问题,但应用程序仍然崩溃。该应用程序可以正常运行第一个视图,但在尝试滑动到第二个和第三个视图时崩溃。如果有人能澄清错误是什么,将不胜感激。我还在代码下方包含了错误日志。public class MainActivity extends AppCompatActivity {private SectionsPagerAdapter mSectionsPagerAdapter;private ViewPager mViewPager;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);    setSupportActionBar(toolbar);    // Create the adapter that will return a fragment for each of the three    // primary sections of the activity.    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());    // Set up the ViewPager with the sections adapter.    mViewPager = (ViewPager) findViewById(R.id.container);    mViewPager.setAdapter(mSectionsPagerAdapter);    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);    fab.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)                    .setAction("Action", null).show();        }    });}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.menu_main, menu);    return true;}这是错误日志;java.lang.NullPointerException:尝试在 android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:394 的空对象引用上调用虚拟方法'java.lang.Class java.lang.Object.getClass()' ) 在 android.support.v4.view.ViewPager 的 android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:104) 的 android.support.v4.app.BackStackRecord.add(BackStackRecord.java:389)。 addNewItem(ViewPager.java:1002) 在 android.support.v4.view。ViewPager.populate(ViewPager.java:1216) 在 android.support.v4.view.ViewPager.populate(ViewPager.java:1084) 在 
查看完整描述

1 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

问题出在这段代码中:


@Override

public Fragment getItem(int position) {

    //returning the current tabs

    switch (position){

        case 0:

            Tab1 tab1 = new Tab1();

            return tab1;

        case 1:

            Tab2 tab2 = new Tab2();

            return tab2;

        case 3:

            Tab3 tab3 = new Tab3();

            return tab3;

        default:

            return null;

    }

}

具体来说,这一行:


case 3:

这应该是case 2相反的。因为它是现在,您将返回null从default你的第三个页面的情况。


顺便说一句,我建议改变你处理这种情况的方式。null我认为您应该这样做,而不是从默认情况下返回:


case default:

    throw new IllegalArgumentException("unexpected position: " + position);

如果你有这个而不是return null,你的错误会更加明显。你会看到的


IllegalArgumentException:意外位置:2


这将帮助您意识到case 3.


一般来说,当你的程序在不应该出现的地方时,你应该总是抛出异常而不是返回一些默认值。


查看完整回答
反对 回复 2022-01-12
  • 1 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信