java.lang.IllegalStateException: Fragmento não existe mais para a chave f1: index 3

Eu quero entender essa exceção para implementar uma correção adequada.

Visão global:

Há um ViewPager e ele usa um FragmentStatePagerAdapter para instanciar 2 fragmentos via getItem eMyFragmentClass.newInstance(...).

O getItem do adaptador é assim:

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;

    switch(position) {
        case 0:
            fragment = MyFragment2.newInstance(par1);
            break;
        case 1:
            fragment = MyFragment2.newInstance(par2, par3);
            break;
    }
    return fragment;
}

Problema:

Quando a atividade é destruída e criada novamente, o adaptador é intantiated novamente, os fragmentos criados novamente comMyFragmentClass.newInstance(...)... mas depois nesta linha:

pager.setAdapter(adapter);

Eu recebo a exceção mencionada.

Eu olhei na fonte onde a exceção é lançada, é isto:

@Override
public Fragment getFragment(Bundle bundle, String key) {
    int index = bundle.getInt(key, -1);
    if (index == -1) {
        return null;
    }
    if (index >= mActive.size()) {
        throw new IllegalStateException("Fragement no longer exists for key "
                + key + ": index " + index);
    }
    Fragment f = mActive.get(index);
    if (f == null) {
        throw new IllegalStateException("Fragement no longer exists for key "
                + key + ": index " + index);
    }
    return f;
}

Então, um pacote é passado lá, com algum estado que faz referência aos meus fragmentos antigos, mas isso não corresponde ao estado atual (mActive), e o exceptio é lançado.

Eu não entendo qual é a idéia por trás disso, ou de que maneira devo instanciar os fragmentos ... então não tenho idéia de como resolver.

Eu também tentei algum truque que recebi de algum outro contexto:

pager.setOffscreenPageLimit(1);

Para evitar que os fragmentos sejam destruídos quando estão fora da tela (no caso do viewpager de 2 páginas, embora não saibam se funciona bem com o adaptador de estado). Mas não parece estar relacionado, pelo menos, não ajuda, ainda obter a mesma exceção.

O que eu fiz agora é colocar um bloco try catch em torno da linha, e bem, então eu recebo páginas em branco em vez de uma caixa de acidente, também não é bom.

questionAnswers(6)

yourAnswerToTheQuestion