Возникла проблема с исключением нулевого указателя в Android - PullRequest
0 голосов
/ 06 января 2020

Вот ошибка

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)

Вот код, который, как мне кажется, имеет проблему

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()
        }
    }

Мой фрагмент может вернуть нулевой фрагмент, поэтому я делаю исключение NullPointerException в PagerAdapter. Может кто-нибудь, пожалуйста, помогите мне, почему я получил NullPointerException с этим? Большое спасибо

1 Ответ

2 голосов
/ 06 января 2020

position начинаются с 0 вместо 1. Попробуйте ниже:

override fun getItem(position: Int): Fragment {

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

Также ваш getCount должен вернуть 3

override fun getCount(): Int {
    return 3
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...