简体   繁体   中英

Having problem with Null Pointer Exception in Android

Here is the error

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 24397
    java.lang.NullPointerException
        at com.example.myapplication.ui.main.SectionsPagerAdapter.getItem(SectionsPagerAdapter.kt:43)
        at androidx.fragment.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:105)
        at androidx.viewpager.widget.ViewPager.addNewItem(ViewPager.java:1010)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1158)
        at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
        at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
        at android.view.View.measure(View.java:24530)

Here is the code that i think has problem

FragmentPagerAdapter

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    if (mCurTransaction == null) {
        mCurTransaction = mFragmentManager.beginTransaction();
    }

    final long itemId = getItemId(position);

    // Do we already have this fragment?
    String name = makeFragmentName(container.getId(), itemId);
    Fragment fragment = mFragmentManager.findFragmentByTag(name);
    if (fragment != null) {
        if (DEBUG) Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment);
        mCurTransaction.attach(fragment);
    } else {
        fragment = getItem(position);
        if (DEBUG) Log.v(TAG, "Adding item #" + itemId + ": f=" + fragment);
        mCurTransaction.add(container.getId(), fragment,
                makeFragmentName(container.getId(), itemId));
    }
    if (fragment != mCurrentPrimaryItem) {
        fragment.setMenuVisibility(false);
        fragment.setUserVisibleHint(false);
    }

    return fragment;
}

SectionsPagerAdapter

override fun getItem(position: Int): Fragment {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        return when(position){
            1 -> input
            2 -> history
            3 -> chart
            else -> throw NullPointerException()
        }
    }

My fragment can return a null fragment so i make a NullPointerException in PagerAdapter. Can someone please help me why I got NullPointerException with this? Many thanks

position start from 0 instead of 1 . Try below:

override fun getItem(position: Int): Fragment {

    return when(position){
        0 -> input
        1 -> history
        2 -> chart
        else -> throw NullPointerException()
    }
}

Also your getCount should return 3

override fun getCount(): Int {
    return 3
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM