0

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

1
  • 1
    I guess that position is not 1,2 or 3 Commented Jan 6, 2020 at 7:23

1 Answer 1

2

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
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.