Reputation:
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
Upvotes: 0
Views: 173
Reputation: 15423
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
}
Upvotes: 2